使用TCP协议完成一个点对点传输文本的例子
【两个用户都是客户端和服务器端】
一般情况下的服务器端和客户端之间的通信模型如图所示:

用户A
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
//TCP协议
public class ChatA {
//构造器
public ChatA(){
try {
ServerSocket server = new ServerSocket(8001);
new Thread(new ARunnable()).start();
Socket socket=null;
while(true){
socket=server.accept();//线程阻塞
//字符流
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());//读一行文字
}
} catch (IOException e) {
e.printStackTrace();
}
}
class ARunnable implements Runnable {
@Override
public void run(){
Scanner scanner=new Scanner(System.in);
while(true){
String message=scanner.next();
Socket socket=null;
message="佩奇:"+message;
//A和B进行连接
try {
socket =new Socket("localhost",8002);//IP和端口号
new PrintWriter(socket.getOutputStream(),true).println(message);//自动冲刷
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
new ChatA();
}
}
用户B
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class ChatB {
public ChatB(){
try {
ServerSocket server = new ServerSocket(8002);//交换端口号
new Thread(new ARunnable()).start();
Socket socket=null;
while(true){
socket=server.accept();//线程阻塞
//字符流
BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println(br.readLine());//读一行文字
}
} catch (IOException e) {
e.printStackTrace();
}
}
class ARunnable implements Runnable {
@Override
public void run(){
Scanner scanner=new Scanner(System.in);
while(true){
String message=scanner.next();
Socket socket=null;
message="乔治:"+message;
//A和B进行连接
try {
socket =new Socket("localhost",8001);//交换端口号
new PrintWriter(socket.getOutputStream(),true).println(message);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
public static void main(String[] args) {
new ChatB();
}
}
运行结果:
ChatA

ChatB

该示例展示了如何使用TCP协议在两个用户间建立点对点通信。每个用户既是服务器也是客户端,通过在不同端口监听和连接实现文本消息的互相传递。用户A在8001端口监听,用户B在8002端口监听,两者通过输入输出流交互信息。
555

被折叠的 条评论
为什么被折叠?



