基础类容学习分享:TCP&UDP

TCP和UDP都是都传输层协议
TCP : 以三次握手的方式进行连接,及甲方向乙方发出连接请求,乙方同意并告知甲方,之后甲方将要传输的类容传输给乙方。
UDP : 以发快递的形式进行连接,及甲方在未告知乙方的情况下直接将传输的类容打包发给乙方,乙方收到传输的类容后不会告知甲方已接收。
TCP因为要连接的原因,所以效率低,但是很安全,UDP因为不需要连接,所以效率高,不安全。

下附代码
public class TCP {

@Test
public void testClient() throws Exception{
	String msg ="!!";
	Socket s = new Socket("127.0.0.1",10000);
	OutputStream os = s.getOutputStream();
	os.write(msg.getBytes());
	s.shutdownOutput();
	InputStream is = s.getInputStream();
	StringBuilder sb = new StringBuilder();
	byte[] b = new byte[1024];
	int len;
	while((len=is.read(b))!=-1) {
		sb.append(new String(b,0,len));
	}
	System.out.println("收到回复"+sb.toString());
	s.shutdownInput();
	s.close();
}


@Test
public void testServer() throws Exception {
	ServerSocket ss = new ServerSocket(10000);
	while(true) {
		Socket socket = ss.accept();
		InputStream is = socket.getInputStream();
		StringBuilder sb = new StringBuilder();
		byte[] b = new byte[1024];
		int len;
		while((len=is.read(b))!=-1) {
			sb.append(new String(b,0,len));
		}
		System.out.println("收到数据"+sb.toString());
		String msg ="??";
		socket.shutdownInput();
		OutputStream os = socket.getOutputStream();
		os.write(msg.getBytes());
		socket.shutdownOutput();
		socket.close();
	}
}

public class UDP {

@Test
public void SendDemo() throws Exception{
	DatagramSocket ds = new DatagramSocket();
	String src = "123456";
	byte[] bys = src.getBytes();
	int length = bys.length;
	InetAddress address = InetAddress.getByName("127.0.0.1");
	int port = 10001;
	DatagramPacket dp = new DatagramPacket(bys,length,address,port);
	ds.send(dp);
	ds.close();
}

@Test
public void ReceiveDemo() throws Exception{
	DatagramSocket ds = new DatagramSocket(10001);
	byte[] bys = new byte[1024];
	int length = bys.length;
	DatagramPacket dp = new DatagramPacket(bys,length);
	System.out.println(1);
	ds.receive(dp);//这里会发生线程阻塞,及线程在运行到这里会停止,直到收到从SendDemo发过来的包再向下运行。
	System.out.println(2);
	byte[] data = dp.getData();
	String str = new String(bys,0,length);
	System.out.println(str);
	ds.close();
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值