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();//釋放資源
                
			
		}
	}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章