仿照例15.4,编写完整的基于Socket的多客户/服务器通信程序
客户端:
import java.io.*;
import java.net.Socket;
public class TalkClient {
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("127.0.0.1", 4700);//本机地址
} catch (IOException e) {
System.out.println("Can't not listen to " + e);
}
//System.out.println("111111");
try {
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));//构建各种输入输出流对象
BufferedWriter os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String readLine;
while(!(readLine = sin.readLine()).equals("bye")) {
os.write(readLine + "\n");
os.flush();
System.out.println("Server " + ": " + is.readLine());
}
os.close();
is.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务器 + 线程:
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
class ServerThread extends Thread{
Socket socket = null;
int clienNum;
public ServerThread(Socket socket, int num){
this.socket = socket;
clienNum = num + 1;
}
public void run(){
try {
String readLine;
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));//构建各种输入输出流对象
BufferedWriter os = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
System.out.println("connected with: " + socket);
System.out.println("Client " + clienNum + ": " + is.readLine());
readLine = sin.readLine();
while(!readLine.equals(“bye”)){
os.write(readLine + “\n”);
os.flush();
System.out.println("Client " + clienNum + ": " + is.readLine());//添加是哪个客户端发过来的消息
readLine = sin.readLine();
}
os.close();
is.close();
socket.close();
} catch (IOException e) {
System.out.println("Error: " + e);
}
}
}
public class MultiTalkServer {
private static int clientNum = 0;
public static void main(String[] args) throws IOException {
ServerSocket server = null;
boolean listening = true;
try {
server = new ServerSocket(4700);//设置监听端口
} catch (IOException e) {
System.out.println("Could not listen on port: 4700");
System.exit(-1);
}
while(listening){
new ServerThread(server.accept(), clientNum).start();//启动新线程
clientNum++;
}
server.close();
}
}