TCP和UDP的简单JAVA程序,从《计算机网络 自顶向上方法》中抄的,然后加了点注释
TCP和UDP的简单JAVA程序,从《计算机网络 自顶向下方法》中抄的,然后加了点注释。
TCP服务器端代码
UDP客户端代码
UDP服务器端代码
注释的有点仓促,希望大家多提意见,多多指点,我看到后肯定给答复。
以下是按照书打的,加了点注释,也就是我个人的理解,由于我刚出茅庐,而且这方面我感觉蛮难得,希望大家有啥意见提出来,大家一起探讨探讨。
TCP客户端程序代码。
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.Socket; import java.net.UnknownHostException; public class TCPClient { /** * @param args * @throws Exception * @throws UnknownHostException * TCP套接字由,源IP地址,源端口号,目标IP地址,目标端口号组成的。 */ public static void main(String[] args) throws UnknownHostException, Exception { // TODO Auto-generated method stub String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); // 获取键盘输入的数据 Socket clientSocket = new Socket("192.168.1.3", 6789); // 建立连接时传入IP地址和端口号,TCP是可靠的连接。 DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); outToServer.writeBytes(sentence + '\n'); modifiedSentence = inFromServer.readLine(); System.out.println("From Server: " + modifiedSentence); clientSocket.close(); } }
TCP服务器端代码
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class TCPServer { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); //这是一个握手请求,当成功时建立一个可靠连接 while (true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); clientSentence = inFromClient.readLine(); capitalizedSentence = clientSentence.toUpperCase() + '\n'; outToClient.writeBytes(capitalizedSentence); } } }
UDP客户端代码
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class UDPClient { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("192.168.1.3"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876); // 与TCP不同,这是无连接的传输,所以把端口号写在packet中, clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); String modifiedSentence = new String(receivePacket.getData()); System.out.println("From sever:" + modifiedSentence); clientSocket.close(); } }
UDP服务器端代码
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class UDPServer { /** * @param args * @throws IOException * * 没有握手请求了。 */ public static void main(String[] args) throws IOException { // TODO Auto-generated method stub DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true){ DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length); serverSocket.receive(receivePacket); String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress(); int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port); serverSocket.send(sendPacket); } } }
注释的有点仓促,希望大家多提意见,多多指点,我看到后肯定给答复。