知识点:服务器端只会起一个线程对所有的客户端连接进行处理,这样会因为某个客户端处理的阻塞,而导致其他客户端得不到处理。
源码如下:分服务器Server/客户端Client两个类。
package communication;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
- @author Dylaniou
- 需要先启动服务器
*/
public class Server {
static ServerSocket serverSocket = null;
static int port = 18000;
static Socket socket = null;
public static void main(String[] args) throws IOException {
serverSocket = new ServerSocket(port);
System.out.println(“服务器启动成功,等待客户端请求”);
socket = serverSocket.accept();
System.out.println(“收到客户端请求”);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
String line = null;
while((line = br.readLine())!=null){
System.out.println(“客户端:” + line+ “,服务器请回答~”);
line = br2.readLine();
bw.write(line);
bw.newLine();
bw.flush();
System.out.println(“服务器:” + line+ “,客户端请回答~”);
line = null;
}
br2.close();
bw.close();
br.close();
}
}
package communication;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
/**
- @author Dylaniou
- 需要先启动服务器
*/
public class Client {
static Socket socket = null;
static int port = 18000;
public static void main(String[] args) throws UnknownHostException, IOException {
socket = new Socket(“localhost”,port);
System.out.println(“客户端成功建立socket连接”);
//发送命令行消息给服务器
//将命令行字节输入流转换为字符输入流,利用缓冲字符输入流读取命令行消息
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//将socket字节输出流转换为字符输出流,利用缓冲字符输出流输出命令行消息
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
BufferedReader br2 = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line =null;
while((line = br.readLine())!=null){
System.out.println( “客户端:” + line+",服务器请回答~");
bw.write(line);
bw.newLine();//用于终止输出行,不然命令行输入再多内容也无法发送出去
bw.flush();
System.out.println(“服务器:” + br2.readLine() + “,客户端请回答~”);
line = null;
}
bw.close();
br.close();
}
}