日更,教你如何一步步成为java软件工程师——网络编程

本文深入解析网络编程核心概念,涵盖Socket套接字的工作原理及其实现方式,对比TCP与UDP协议特性,详述UDP与TCP在Socket编程中的具体应用流程,包括发送端与接收端的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程

Socker套接字:传输层为应用层开辟的通道
不同的协议针对Socket的实现是不一样的

传输层协议之间的区别:
TCP:面向对象的
UDP:非面向对象的

UDP实现Socket编程:
DatagramSocker:定义接收端和发送端
DatagramPacket:数据包裹

发送端基本流程:

1、定义发送端,指定端口
2、准备数据,转为字节数组
3、数据打包
4、发送数据
5、关闭资源

public static void main(String[] args) throws IOException {
		System.out.println("---------发送端----------");
		//1.定义发送端  DatagramSocket(int port)
		DatagramSocket send=new DatagramSocket(8888);
		//2.准备数据  ,转为字节数组
		String msg="你好就好,要过的没我好...";
		byte[] arr=msg.getBytes();
		//3.3.DatagramPacket 打包
		//DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 
		//DatagramPacket(byte[] buf, int offset, int length, SocketAddress address) 
		DatagramPacket packet=new DatagramPacket(arr,0,arr.length,new InetSocketAddress("127.0.0.1", 9999));
		//4.发送
		send.send(packet);
		//5.关闭
		send.close();
	}

接收端基本流程:
1、定义接收端,指定端口
2、准备字节数组
3、进行打包
4、接收数据
5、处理数据
6、关闭资源

	public static void main(String[] args) throws IOException {
		System.out.println("---------接收端----------");
		//1.DatagramSocket 指定端口号  定义接收端
		DatagramSocket rec=new DatagramSocket(9999);
		//2.准备字节数组,进行打包(用来接收数据,把数据接收到包裹里面的字节数据中)
		byte[] arr=new byte[1024*60];
		//3.打包
		//DatagramPacket(byte[] buf, int offset, int length) 
		DatagramPacket packet=new DatagramPacket(arr,0,arr.length);
		//4.接收
		rec.receive(packet);  //阻塞式接收
		//5.处理数据
		/*
		 *   byte[] getData() 
			          返回数据缓冲区。 
			 int getLength() 
			          返回将要发送或接收到的数据的长度。 
		 */
		byte[] newArr=packet.getData();
		System.out.println(newArr.length); //字节数组的长度
		System.out.println(packet.getLength());  //接到数据的个数
		
		System.out.println(new String(newArr,0,packet.getLength()));
		
		//6.关闭
		rec.close();
	}

TCP实现客户端:
1、定义客户端,指定服务端IP和端口
2、准备数据
3、通过IO流写入
4、关闭

public static void main(String[] args) throws IOException {
		//3.定义客户端
		Socket client=new Socket("127.0.0.1",8989);
		//1.获取键盘输入流
		BufferedReader read=new BufferedReader(new InputStreamReader(System.in));
		//2.接收数据
		System.out.println("请输入用户名:");
		String uname=read.readLine();
		System.out.println("请输入密码:");
		String upwd=read.readLine();
		
		//发送数据
		//4.通过socket获取 输出流
		DataOutputStream out=new DataOutputStream(client.getOutputStream());
		//5.写出  uname=zhangsan&pwd=123
		out.writeUTF("uname="+uname+"&upwd="+upwd);
		out.flush();
		
		//6.关闭
		out.close();
		read.close();
		client.close();

TCP实现服务端:
1、定义服务端,指定端口
2、阻塞式监听
3、IO流读写
4、关闭

public static void main(String[] args) throws IOException {
		System.out.println("---------Server------------");
		//1.定义服务端  ServerSocket
		ServerSocket server=new ServerSocket(8989);
		//2.Socket accept() 侦听并接受到此套接字的连接。 
		Socket client=server.accept();
		System.out.println("--------一个客户端连接成功---------");
		DataInputStream is=new DataInputStream(client.getInputStream());
		String str=is.readUTF();
		System.out.println(str);
		
		String uname=null;
		String upwd=null;
		
		//数据的处理
		String[] keyValue=str.split("&");
		for(String s:keyValue){
			String[] ss=s.split("=");
			if("uname".equals(ss[0])){
				uname=ss[1];
			}else if("upwd".equals(ss[0])){
				upwd=ss[1];
			}
		}
		
		//输出数据到客户端

		
		//3.关闭
		is.close();
		client.close();
		server.close();
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值