java的基础网络编程:TCP/UDP

1.TCP



服务器端:

import java.io.*;
import java.net.*;
import java.util.*;

public class TCPServer
{
   public static void main(String args[])
   {
   	int count=0;
   	try
   	{
   	  ServerSocket server=new ServerSocket(8888); //创建绑定端口8888的服务器套接字
   	  System.out.println("服务器对端口进行监听");
   	  //服务器循环接收客户端的链接请求
   	  boolean flag=true;
   	  while(flag)
   	  {
   	  	Socket st=server.accept();//接收客户端请求,返回对应的Socket
   	  	DataInputStream din=new DataInputStream(st.getInputStream()); //获取当前链接的输入流,并利用处理流进行封装
   	  	DataOutputStream dout=new DataOutputStream(st.getOutputStream());//获取当前链接的输出流,并利用处理流进行封装
   	  	System.out.println("这是第 "+(++count)+"个客户访问");
   	  	System.out.println("客户端IP地址:"+st.getInetAddress());
   	  	System.out.println("客户端信息: "+din.readUTF());
   	  	
   	  	//向客户端发送信息
   	  	dout.writeUTF("你好!已收到信息");
   	  	if(count==2)  //设定一个条件,自设!
   	  	     flag=false;
   	  	
   	  	//关闭流
   	  	din.close();
   	  	dout.close();
   	  	//关闭套接字
   	  	st.close();	
   	    
   	  }
   	  server.close();
   	  
    }
    catch(Exception e)
    {
    	e.printStackTrace();
    }
    
   }	
	
}

客户端:

import java.io.*;
import java.net.*;
import java.util.*;

public class TCPClient
{
	public static void main(String args[])
 {
	 try
	 {
	 	 Socket sc=new Socket("127.0.0.1",8888); //创建链接到服务器端口的套接字
	 	 DataInputStream din=new DataInputStream(sc.getInputStream()); //获取当前链接的输入流,并利用处理流进行封装
   	 DataOutputStream dout=new DataOutputStream(sc.getOutputStream());//获取当前链接的输出流,并利用处理流进行封装
   	 
   	 //向服务器发送数据
   	 dout.writeUTF("hello server!");
   	 System.out.println(din.readUTF());
   	 //关闭流
   	 din.close();
   	 dout.close();
   	 sc.close();
	 }
	 
	 catch(Exception e)
	 {
	 	 e.printStackTrace();
	 }
	
	
	}	
}

PS:可以在这基础上扩展成基于TCP的聊天小程序。


2.UDP



服务器端:

import java.io.*;
import java.net.*;
import java.util.*;

public class UDPServer
{
	public static void main(String args[]) throws IOException
	{
		DatagramSocket server=new DatagramSocket(8888); //创建udp套接字
		boolean flag=true;
		while(flag)
	 {
			//接收客户端的信息
			byte[] recvbuf=new byte[100];
			DatagramPacket recvbag=new DatagramPacket(recvbuf,recvbuf.length);
			server.receive(recvbag); //接收数据包
			String recv=new String(recvbag.getData(),0,recvbag.getLength()); //拆包,得到缓冲区的数据
			int port=recvbag.getPort();
			InetAddress addr=recvbag.getAddress();
			System.out.println(port+": "+recv);
			if(recv.equals("bye"))
			   flag=false;
			//向客户端发送信息
			byte[] sendbuf=new byte[200];
			String sendStr; //键盘输入发送内容
			Scanner in=new Scanner(System.in);
			System.out.println("请输入内容:");
			sendStr=in.nextLine();
			sendbuf=sendStr.getBytes();
			DatagramPacket sendbag=new DatagramPacket(sendbuf,sendbuf.length,addr,port);
			server.send(sendbag); //发送
			
	 }
		server.close();
	}

}

客户端:

import java.io.*;
import java.net.*;
import java.util.*;

public class UDPClient
{
	public static void main(String args[]) throws IOException
	{
		DatagramSocket client=new DatagramSocket(); //创建udp套接字,客户端不需要绑定端口
		boolean flag=true;
		while(flag)
		{
			//向发送服务器内容
			byte[] sendbuf=new byte[200];
			String sendStr; //键盘输入发送内容
			System.out.println("请输入内容:");
			Scanner in=new Scanner(System.in);
			sendStr=in.nextLine();
			sendbuf=sendStr.getBytes();
			//发送方的端口和IP地址
			int port=8888;
			InetAddress addr= InetAddress.getByName("127.0.0.1");
			//创建发送的数据报包
			DatagramPacket sendbag=new DatagramPacket(sendbuf,sendbuf.length,addr,port);
			//发送
			client.send(sendbag);
			
			if(sendStr.equals("bye"))
				   flag=false;
				   
			//接收服务器发来的数据
			byte[] recvbuf=new byte[100];
			DatagramPacket recvbag=new DatagramPacket(recvbuf,recvbuf.length); //创建接收报包
			
			client.receive(recvbag); //接收数据包
			String recv=new String(recvbag.getData(),0,recvbag.getLength()); //拆包,得到缓冲区的数据
			int srvport=recvbag.getPort();
			InetAddress srvaddr=recvbag.getAddress();
			System.out.println(srvport+": "+recv);
			
		}
		client.close();
	}
	
	
}

PS:这是基于UDP的聊天程序,以bye来结束链接。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值