一共三个文件;
如下:
1.MultiTalkServer
package socket;
import java.io.*;
import java.net.*;
import socc.ServerThread;;
public class MultiTalkServer {
static int clientnum = 0;
static int part = 4700;
public static void main(String[] args) throws IOException {
System.out.println("服务端开始执行!");
ServerSocket serverSocket = null;
boolean listening = true;
try{
serverSocket = new ServerSocket(part);
}catch (IOException e){
System.out.println("coutld not listen on part :" + part);
System.exit(-1);
}
while(listening){
new ServerThread(serverSocket.accept(),clientnum).run();
clientnum ++;
}
serverSocket.close();
}
}
2.TalkClient
package socket;
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String[] args) {
System.out.println("客户端开始执行!");
try{
//监听ip为..的端口为4700的
Socket socket = new Socket("122.207.221.46",4700);
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
// 从socket流得到消息创建对象,有发送到服务端的作用
PrintWriter os = new PrintWriter(socket.getOutputStream());
//从socket流得到消息创建对象,有从服务端得到消息的作用
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline = sin.readLine();
while(!readline.equals("byebye")){
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);
}
}
}
3.ServerThread
package socc;
import java.io.*;
import java.net.*;
public class ServerThread {
Socket socket = null;
int clientnum;
public ServerThread(Socket socket, int num){
this.socket = socket;
this.clientnum = num + 1;
}
public void run(){
try{
System.out.println("进程开始执行!");
String line;
//从socket对象得到输入流,并创建BufferedReader对象,这个对象的作用是从客户端得到消息
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//从socket对象得到输出流,并创建PrintWriter对象,这个对象的作用是从服务端发送消息到客户端
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("byebye")){
System.out.println("一个新的进程开始执行!");
os.println(line);
os.flush();
System.out.println("Server :" + line);
System.out.println("client :" + clientnum + is.readLine()); //从客户端得到消息并输出
line = sin.readLine();
}
os.close();
is.close();
sin.close();
socket.close();
}catch (Exception e){
System.out.println("Error: " + e);
}
}
}