資源描述:
《socket編程 udp和tcp 通信示例》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、android?開發(fā)之socket編程?UDP和TCP通信實現(xiàn)原理圖應用程序通過套接字通信,其協(xié)議如下:UDP:把數(shù)據(jù)打包后直接發(fā)送給相應的IP,數(shù)據(jù)大小有限制,連接不可靠。TCP:服務器與客戶端協(xié)議必須匹配,即都是用TCP協(xié)議,先建立連接,再發(fā)送數(shù)據(jù),其連接可靠。通信方式如下圖所示:代碼示例UDP通信:UDP使用DatagramSocket對象實現(xiàn)數(shù)據(jù)交互??蛻舳丝蛻舳耸纠a如下:importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetAddress;pub
2、licclassClient{publicstaticvoidmain(String[]args){try{//創(chuàng)建一個DatagramSocket對象,不要有端口號,否則設置的端口被本類獨占。DatagramSocketsocket=newDatagramSocket();//創(chuàng)建一個InetAddressInetAddressserverAddress=InetAddress.getByName("127.0.0.1");//創(chuàng)建傳輸字符串Stringstr="hello";//轉換成字節(jié)數(shù)組bytedata[]=str.getBytes();//創(chuàng)建以供D
3、atagramPacket對象,指定其發(fā)送地址和端口號DatagramPacketpacket=newDatagramPacket(data,data.length,serverAddress,4567);//調用socket對象的send()方法發(fā)送數(shù)據(jù)socket.send(packet);}catch(Exceptione){e.printStackTrace();}}}服務器端服務器示例代碼如下:importjava.io.IOException;importjava.net.DatagramPacket;importjava.net.DatagramS
4、ocket;importjava.net.SocketException;publicclassServer{publicstaticvoidmain(String[]args){//創(chuàng)建一個DatagramSocket對象,指定端口為4567try{DatagramSocketsocket=newDatagramSocket(4567);bytedata[]=newbyte[1024];//創(chuàng)建一個空DatagramPacket對象DatagramPacketpacket=newDatagramPacket(data,data.length);//使用rece
5、iver方法接手客戶端所發(fā)送到數(shù)據(jù),如果客戶端沒有發(fā)送數(shù)據(jù),進程阻塞socket.receive(packet);Stringresult=newString(packet.getData(),packet.getOffset(),packet.getLength());System.out.println("result-------->"+result);}catch(SocketExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}}}運行結果:PS:Window
6、s下查看端口:netstat-n-a
7、find"4567"TCP通信:TCP通信需先建立連接,然后進行數(shù)據(jù)通信??蛻舳薸mportjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.net.UnknownHostException;publicclassClient{publicstaticvoidmain(String[]args){try{/
8、/創(chuàng)建一個Socket對象,指定服務器端的IP地址和端口號Socketsocket=newSocket("127.0.0.1",4567);//使用InputStream讀取硬盤上的文件InputStreaminputStream=newFileInputStream("D:\aa.txt");//從Socket當中得到OutputStreamOutputStreamoutputStream=socket.getOutputStream();byte[]buffer=newbyte[4*1024];inttemp=0;//將InputStream當中的數(shù)據(jù)取出
9、,并寫入到OutputS