这次的改进解决了客户与服务器每次交互时必须重建连接的问题,但一旦绑定后,其他客户端不能再连接到服务器。这是一个单线程的服务器。
服务器端:
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();
}
}