TCP和UDP以及多线程TCP


UDP


服务端

public class UDPServer {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		DatagramSocket socket=new DatagramSocket(8800);
		byte[] num=new byte[1024];
		DatagramPacket packet=new DatagramPacket(num,num.length);
		System.out.println("********服务端已经启动,正在等待客户端发送信息*******");
		
		
		socket.receive(packet);//服务端已经接收数据,它与客户端已经有连接,packet内有地址和端口号
		String info=new String(num,0,packet.getLength());//从NUM中接收数据,数据的长度是packet包中传来的数据长度
		System.out.println("服务端接收到客户端说"+info);//服务端打印出客户端的信息
		
		String str="服务端接收到了您的信息!";
		InetAddress address=packet.getAddress();
		int port=packet.getPort();
		byte[] arr=str.getBytes();
		DatagramPacket packet1=new DatagramPacket(arr,arr.length,address,port);
		//需要传送的字节数组和字节数组长度和客户端的地址和端口号,里面是客户端的信息
		
		socket.send(packet1);//socket要发送数据报
		socket.close();
	}

}

客户端

public class UDPClient {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		/*
		 * 向服务器发送数据
		 */
		//定义服务器的地址、端口号、数据
		InetAddress address=InetAddress.getByName("localhost");//用户端的地址
		int port=8800;
		byte[] num="我是客户发给服务端的消息".getBytes();
		DatagramSocket socket=new DatagramSocket();
		DatagramPacket js=new DatagramPacket(num,num.length,address,port);//数据报的所有信息是服务端的
		socket.send(js);
		/*
		 * 接收服务端发送数据
		 */
		byte[] arr=new byte[1024];
		DatagramPacket js1=new DatagramPacket(arr,arr.length);//packet内是字节数组
		socket.receive(js1);//socket端口只能被packet接收
		String info=new String(arr,0,js1.getLength());//字符串是字节0--包接收的长度
		System.out.println("客户端接收到服务端,服务端说"+info);
		socket.close();
		
		

	}

}


TCP


服务端

public class TCPServer {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub

		/*
		 * 1监听或确认接收数据
		 * 2获取客户端输出流
		 * 3交互数据
		 */
		int port=8844;
		ServerSocket serverSocket=new ServerSocket(port);
		Socket socket=serverSocket.accept();//开始监听,确认接收数据
		OutputStream os=socket.getOutputStream();//接收客户端数据中的输出端
		System.out.println("**********交互数据*********");
		byte[] arr="服务端欢迎您!".getBytes();
		os.write(arr);//向客户端的输出流写入服务端的数据byte
		
		InputStream is=socket.getInputStream();
		byte[] brr=new byte[1024];
		int len=is.read(brr);
		System.out.println("客户端对服务端说"+new String(brr,0,len));
		is.close();
		os.close();//输出流关闭
		socket.close();//socket关闭
		serverSocket.close();
		
		
	}

}

客户端

public class TCPClient {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		int port=8844;//服务端的端口号
		InetAddress address=InetAddress.getByName("localhost");//得到服务端的地址
		Socket socket=new Socket(address,port);
		InputStream is=socket.getInputStream();//得到接收数据流
		byte[] arr=new byte[1024];
		
		int len=is.read(arr);
		System.out.println("服务器对客户端说"+new String(arr,0,len));
		
		OutputStream os=socket.getOutputStream();
		byte[] brr="我是客户端,你好!".getBytes();
		os.write(brr);
		os.close();
		socket.close();//释放资源
	}

}


多线程TCP


服务端

public class TCPServer {

	
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		int post=8899;
		ServerSocket serverSocket=new ServerSocket(post);
		while(true) {
		Socket socket=serverSocket.accept();
		new Thread() {//为每个用户创建socket
			OutputStream os;
			public void run() {
				try {
					os=socket.getOutputStream();
					System.out.println("**********交互数据*********");
					byte[] arr="服务端欢迎您!".getBytes();
					os.write(arr);//向客户端的输出流写入服务端的数据byte
					
					InputStream is=socket.getInputStream();
					byte[] brr=new byte[1024];
					int len=is.read(brr);
					System.out.println("客户端对服务端说"+new String(brr,0,len));
					is.close();
					os.close();//输出流关闭
					socket.close();
				}catch(Exception e){
					e.printStackTrace();
				}
			}
			
		}.start();
		}
	}
}

客户端

public class TCPClient {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		int post=8899;
		InetAddress adress=InetAddress.getByName("localhost");
		Socket socket=new Socket(adress,post);
				InputStream is;
					is=socket.getInputStream();//得到接收数据流
					byte[] arr=new byte[1024];
					
					int len=is.read(arr);
					System.out.println("服务器对客户端说"+new String(arr,0,len));
					
					OutputStream os=socket.getOutputStream();
					byte[] brr="我是客户端,你好!".getBytes();
					
					os.write(brr);
					os.close();
					socket.close();//释放资源
                
			
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章