这次的改进解决了客户与服务器每次交互时必须重建连接的问题,但一旦绑定后,其他客户端不能再连接到服务器。这是一个单线程的服务器。
服务器端:
package Server;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import client.user;
public class ServerTest implements Runnable {
private int port;//端口号
private ServerSocket server = null;
public ServerTest(){
this(8000);
}
public ServerTest(int port){
this.port = port;
}
public void run() {
try {
server = new ServerSocket(port);
Socket client = server.accept();
ObjectInputStream ois = new ObjectInputStream(
client.getInputStream());
while(true){
System.out.println(client);
String str;
try {
str = (String)ois.readObject();
System.out.println(str);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
} catch (IOException e1) {
e1.printStackTrace();
}finally{
if(server != null)
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String []args){
ServerTest s = new ServerTest();
new Thread(s).start();
}
}
客户端:
package client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientTest implements Runnable{
private String host;
private int port;
private Socket client;
private BufferedReader br;
private ObjectOutputStream oos;
ClientTest(){
this("172.17.4.20",8000);
}
ClientTest(String IP,int port){
this.host = IP;
this.port = port;
try {
client = new Socket(host,port);
br = new BufferedReader(new InputStreamReader(System.in));
oos = new ObjectOutputStream(client.getOutputStream());
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String into;
while(true){
try {
into= br.readLine();
oos.writeObject(into);
oos.flush();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String []args){
ClientTest c = new ClientTest();
new Thread(c).start();
}
}
本文介绍了一种单线程服务器的实现方式,该服务器优化了客户端与服务器的连接管理,使得双方在交互过程中无需每次都重新建立连接。同时,文中提供了服务器端与客户端的Java代码示例。

被折叠的 条评论
为什么被折叠?



