TCP
1.服務器綁定端口號啟動服務器歡迎socket。
2. 等待客戶端發(fā)送請求。
3.等到客戶端發(fā)送請求之后,服務器與客戶端重新建立一個socket,但是客戶端的目標端口不變。
java代碼如下
客戶端
客戶端代碼圖解
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(
new InputStreamReader(System.in));
//開一個socket
Socket clientSocket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(
clientSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(new InputStreamReader(
clientSocket.getInputStream()));
sentence = inFromUser.readLine();
//發(fā)送請求
outToServer.writeBytes(sentence + '\n');
//接受響應
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " +
modifiedSentence);
//關(guān)閉客戶端
clientSocket.close();
}
}
服務端?
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
//開一個socket用做于歡迎socket
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();
//改變客戶端發(fā)送的信息
capitalizedSentence =
clientSentence.toUpperCase() + '\n';
//發(fā)回給客戶端
outToClient.writeBytes(capitalizedSentence);
}
}
}
UDP?
1.udp的客戶端可以比udp的服務端先開啟
2.服務器綁定端口?文章來源:http://www.zghlxwxcb.cn/news/detail-514540.html
java代碼如下:
客戶端?
文章來源地址http://www.zghlxwxcb.cn/news/detail-514540.html
import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader
(System.in));
//為客戶端進程創(chuàng)建了一個門,但沒有在兩個進程之間創(chuàng)建管道
DatagramSocket clientSocket = new DatagramSocket();
//調(diào)用DNS查找
InetAddress IPAddress =
InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
//與TCP發(fā)送流不同,udp是打一個包發(fā)過去,這個就是udp的包
//這一行構(gòu)造數(shù)據(jù)包sendPacket,客戶機將通過套接字將其彈出到網(wǎng)絡中。
// 這個包包括包中包含的數(shù)據(jù)、sendData、該數(shù)據(jù)的長度、服務器的IP地址和應用程序的端口號(我們將其設(shè)置為9876)。
DatagramPacket sendPacket =
new DatagramPacket(sendData, sendData.length,
IPAddress, 9876);
clientSocket.send(sendPacket);
//接受服務器響應包
DatagramPacket receivePacket =
new DatagramPacket(receiveData,
receiveData.length);
clientSocket.receive(receivePacket);
//將回復的包中的數(shù)據(jù)拿出來
String modifiedSentence =
new String(receivePacket.getData());
System.out.println("FROM SERVER:" +
modifiedSentence);
//關(guān)閉客戶端,釋放資源
clientSocket.close();
}
}
?服務器
import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String args[]) throws Exception
{
DatagramSocket serverSocket = new
DatagramSocket(9876);
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
while(true)
{
//接受客戶端發(fā)來的請求
DatagramPacket receivePacket =
new DatagramPacket(receiveData,
receiveData.length);
serverSocket.receive(receivePacket);
//將客戶端的請求的信息轉(zhuǎn)為字符數(shù)組
String sentence = new String(
receivePacket.getData());
//從請求里拿到客戶端IP地址
InetAddress IPAddress =
receivePacket.getAddress();
//拿到客戶端端口
int port = receivePacket.getPort();
String capitalizedSentence =
sentence.toUpperCase();
sendData = capitalizedSentence.getBytes();
//將要返回的響應打包,里面需要客戶端的IP地址,客戶端端口
DatagramPacket sendPacket =
new DatagramPacket(sendData,
sendData.length, IPAddress, port);
//服務器發(fā)送響應包
serverSocket.send(sendPacket);
}
}
}
到了這里,關(guān)于計網(wǎng)實驗第二章:TCP與UDP實驗的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!