客户服务器交互简单的例子改进(1)人有待改进

来源:互联网 发布:淘宝店招图片大全免费 编辑:程序博客网 时间:2024/05/22 06:22

这次的改进解决了客户与服务器每次交互时必须重建连接的问题,但一旦绑定后,其他客户端不能再连接到服务器。这是一个单线程的服务器。

服务器端:

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();
 }
}
 

原创粉丝点击