思路:
1.首先建立服务器监听
ServerSocket server = new ServerSocket(5000);
监听某个指定端口号是否有连接请求
2.客户端发起请求,也就是new了一个Socket socket = new Socket(host,port);
想某个指定端口号发起请求
3.连接确认
当服务器通过accept()方法接受来自客户端的请求
Socket socket = server.accpet();//返回一个Socket对象来处理与客户端的通信
然后建立一个线程来处理
new Thread(new SeverStream(socekt,number)).start();
每收到一个客户端请求,服务器建立一个线程来处理客户端的请求
package exercise01;
import java.net.*;
import java.io.*;
public class ChatServer {
public static void main(String[] args) throws IOException{
ServerSocket serverSocket = new ServerSocket(5000);//监听某个特定端口号
int number = 1;
while(true)
{
Socket socket = serverSocket.accept();//客户端发送请求
System.out.println("客户端"+number+"链接成功");
//开启一个新线程来处理客户端的请求
new Thread(new ServerStream(socket,number)).start();
number++;
}
}
}
package exercise01;
import java.net.*;
import java.io.*;
public class ChatClient {
public static void main(String[] args) throws IOException{
//向服务器发送请求
Socket socket = new Socket(InetAddress.getLocalHost(),5000);
//获取键盘输入流
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//用来向服务器发送消息
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true)
{
String line = br.readLine();
bw.write(line);
bw.newLine();//这里是表示一条消息的完成以回车为结束符
bw.flush();//把缓冲流刷新
if(line.equals("over"))
break;
}
bw.close();
br.close();
socket.close();
}
}
package exercise01;
import java.net.*;
import java.io.*;
public class ServerStream implements Runnable {
private Socket socket = null;
private int number;
public ServerStream(Socket socket,int number)
{
this.socket = socket;
this.number = number;
}
public void run()
{
try
{
//接受客户端发送的消息
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream());
while(true)
{
String line = br.readLine();//读取字符串
if(line.equals("over"))
break;
System.out.println("客户端"+number+"说:"+line);
}
}
catch(IOException e)
{
}
finally {
try {
socket.close();
}
catch(IOException e)
{
}
}
}
}