网络编程TCP与UDP

TCP与UDP区别

1.TCP面向连接,发送数据前要先建立连接;UDP是无连接的,发送数据前不需要建立连接;

2.TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,不保证可靠交付;

3.UDP有较好的实时性,效率比TCP高,适用于对高速传输和实时性较高的通信或广播通信;

4.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信;

 

使用TCP/IP的套接字(Socket)进行通信
1.服务器程序将一个套接字绑定到一个特定的端口,并通过此套接字等待和监听客户端到端口的连接请求。
2.客户端程序根据服务器程序所在的主机名和端口发出连接请求。

 

使用ServerSocketSocket实现服务器端和客户端的Socket通信

 

 

 代码示例如下。注意因为客户端要向服务器端发送数据,所以应该使用 output Stream、发送,而服务器端要接受来自客户的数据,所以用 inputStream 接收

public class Client {
	//客户端
	public static void main(String[] args) {
		try {
                    获取服务器链接
                    Socket socket = new Socket("127.0.0.1",9999);
			//打开输出流
			OutputStream outputStream = socket.getOutputStream();
			//向输出流输出数据
			InputStream inputStream = new FileInputStream("E:\\Document\\temp\\newFood.jpg");
			byte []car = new byte[1024];
			
			int length = 0;
			while((length=inputStream.read(car))!=-1) {
				outputStream.write(car,0,length);
			}
                        //关闭资源
			outputStream.flush();
			outputStream.close();
			inputStream.close();
			socket.close();
                    } catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

public class Server {
        //服务器端
	public static void main(String[] args) {
		try {    //获取端口号
                        ServerSocket serverSocket = new ServerSocket(9999);
                        //等待客户但请求
			Socket socket = serverSocket.accept();
			//得到客户端数据
			InputStream inputStream = socket.getInputStream();
			byte []car = new byte[1024];
			int length = 0;
                        //输出到硬盘
			OutputStream outputStream = new FileOutputStream("E:\\Document\\temp\\Good.jpg");
			
			while((length=inputStream.read(car))!=-1) {
				outputStream.write(car,0,length);
			}
                        //关闭资源
			outputStream.flush();
			outputStream.close();
			inputStream.close();
			socket.close();
	
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

 

 

 此时我们仅启动了服务器端,可以看到控制台那里一直等待用户端访问。此时的硬盘文件。

然后启动客户端。

完成了接收一个图片,并输出到硬盘上的操作。

 

 

UDP是用户数据报协议,基于UDP的Socket编程是一种非连接的Socket通信,它提供的是无连接、不可靠信息传送服务。

DatagramSocket:用来发送接收数据包的套接字

DatagramPacket :表示数据包

步骤:1.创建数据Socket,指定一个服务端端口号。2.提供一个byte数组用于数据存储。3.调用DatagramPacketreceive() 方法进行数据的接收;4.调用DatagramPacketgetData()方法得到byte数组的数据;5.释放资源。如下面代码

public class Client {
	
	public static void main(String[] args) {
		try {   //先设置一个与服务器端不同的端口号
			DatagramSocket socket = new DatagramSocket(9999);
			byte[]data = "来自客户端的问候".getBytes();
                        //设置socket地址
			SocketAddress address= new InetSocketAddress("127.0.0.1",8888);
                         //与数据一起打包
			DatagramPacket packet = new DatagramPacket(data, data.length,address);
			//发送
			socket.send(packet);
			socket.close();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

 

 

public class Server {
	public static void main(String[] args) {
		try {    //设置端口号
			DatagramSocket socket = new DatagramSocket(8888);
			
			byte []car = new byte[1024];
			DatagramPacket packet = new DatagramPacket(car,car.length);
                        //接收数据包
			socket.receive(packet);
			int length = packet.getLength();
			System.out.println(new String(car,0,length));
			socket.close();
			
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

 可以看到UDP将地址和端口号一起放在包里面发送出去。

 运行客户端:

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值