客户端通信程序:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MultiTalkClient {
int num;
public static void main(String[] args) {
try{
//首先建立通信所用的套件字
Socket socket = new Socket("127.0.0.1",4700);
//键盘输入流
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
//通信输出流
PrintWriter os = new PrintWriter(socket.getOutputStream());
//通信输入流
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline = sin.readLine();
while(!readline.equals("bye")){
//打印键盘输入的字符串
os.println(readline);
//强制输出
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
//不断获取键盘的输入
readline = sin.readLine();
}
//关闭输出
os.close();
//关闭输入
is.close();
//关闭通信连接
socket.close();
}catch(Exception e){
System.out.println("Error"+e);
}
}
}
服务端多通信程序
import java.io.IOException;
import java.net.ServerSocket;
public class MultiTalkServer {
//客户端连接的数量
static int clientnum= 0;
public static void main(String[] args) throws IOException {
//建立服务端连接的套接字
ServerSocket serverSocket = null;
//初始化监听为true
boolean listening = true;
try{
serverSocket = new ServerSocket(4700);
}catch (IOException e){
System.out.println("Could not listen on port:4700");
System.exit(-1);
}
while(listening){//监听
new ServerThread(serverSocket.accept(),clientnum).start();
clientnum++;
}
serverSocket.close();
}
}
使用多线程实现多通信任务
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ServerThread extends Thread {
Socket socket = null;
int clientnum;
//创建构造方法
public ServerThread(Socket socket,int num){
//套接字
this.socket = socket;
//客户端编号
clientnum = num +1;
}
@Override
public void run(){
try{
String line;
//Socket输入流
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//Socket输出流
PrintWriter os = new PrintWriter(socket.getOutputStream());
//键盘输入流
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
//显示第几个客户端发信息
System.out.println("Client"+clientnum+":"+is.readLine());
line = sin.readLine();
while(line.equals("bye")){
//打印输出
os.println(line);
os.flush();
//显示服务器从键盘输入的信息
System.out.println("Server:"+line);
//从第几个客户端传入的信息
System.out.println("Clinet:"+clientnum+":"+is.readLine());
//不断输入
line = sin.readLine();
}
//关闭输出流
os.close();
//关闭输入流
is.close();
//中断通信连接
socket.close();
}catch (Exception e){
System.out.println("Error:"+e);
}
}
}
-
PrintWriter 将对象的格式表示打印到文本输出流。
-
Socket 该类实现客户端套接字(也称为“套接字”)。 套接字是两台机器之间通讯的端点。
-
BufferedReader 从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取。