簡(jiǎn)單記錄下UDP/TCP基本連接代碼,方便后面測(cè)試需要時(shí)直接使用
區(qū)別
簡(jiǎn)單說明下二者的區(qū)別
tcp面向連接,需要先建立連接,一對(duì)一傳輸數(shù)據(jù)捅伤,數(shù)據(jù)發(fā)送穩(wěn)定,傳輸數(shù)據(jù)量也比udp大
udp不需要建立連接巫玻,為廣播發(fā)送數(shù)據(jù)丛忆,數(shù)據(jù)發(fā)送不穩(wěn)定祠汇,無法確保接收端成功收到數(shù)據(jù)
基本連接代碼
udp基本連接代碼
接收端
1.先建立udp的socket,明確那個(gè)端口(對(duì)應(yīng)發(fā)送端設(shè)置的端口)
DatagramSocket ds = new DatagramSocket(10000);
2.定義數(shù)據(jù)包
byte[] bu = new byte[1024];
DatagramPacket dg = new DatagramPacket(bu,bu.length);
3.接收數(shù)據(jù)熄诡。先將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)包中
ds.receive(dg);
4.通過數(shù)據(jù)包對(duì)象獲取數(shù)據(jù)內(nèi)容可很。包括ip、端口凰浮、發(fā)送的內(nèi)容
String ip = dg.getAddress().getHostAddress();
int port = dg.getPort();
String text = new String(dg.getData(),0,dg.getLength());
System.out.println("內(nèi)容:"+text+";ip:"+ip+";端口:"+port);
5.關(guān)閉流
ds.close();
發(fā)送端
1.先建立udp的socket
DatagramSocket ds = new DatagramSocket();
2.將數(shù)據(jù)封裝到數(shù)據(jù)包中我抠,數(shù)據(jù)包對(duì)象是datagramPacket
byte[] buf = "upd發(fā)送成功!".getBytes();
DatagramPacket dg = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.2"),10000);
3.使用socket的send方法袜茧,將數(shù)據(jù)包發(fā)送出去
ds.send(dg);
4.關(guān)閉流
ds.close();
tcp基本連接代碼
客戶端
1.創(chuàng)建Socket對(duì)象菜拓,并連接服務(wù)端
Socket socket = new Socket("192.168.1.2",1211);
* 2.根據(jù)socket對(duì)象創(chuàng)建輸出流對(duì)象,寫入數(shù)據(jù)
OutputStream out = socket.getOutputStream();
out.write("Tcp數(shù)據(jù)發(fā)送成功笛厦!".getBytes());
* 3.關(guān)閉連接
socket.close();
服務(wù)端
1.創(chuàng)建ServiceSocket對(duì)象纳鼎,設(shè)置需要監(jiān)聽的端口
ServerSocket ss = new ServerSocket(1211);
* 2.從ServerSocket對(duì)象中獲取到客戶端Socket對(duì)象
Socket socket = ss.accept();
* 3.根據(jù)客戶端Socket對(duì)象創(chuàng)建對(duì)應(yīng)的輸入流對(duì)象
InputStream in = socket.getInputStream();
* 4.再把輸入對(duì)象中的內(nèi)容讀取出來,放到byte數(shù)組中
byte[] bt = new byte[1024];
int len = in.read(bt);
String text = new String(bt,0,len);
5.關(guān)閉連接和流
socket.close();
in.close();