基于TCP的Socket编程,我想在客户端通过键盘输入一个用户名,然后把这个值发送到服务器,并在服务器端输出,然后服务器发送一句欢迎信息到客户端,并在客户端显示出来!我写的这个编译也能通过,可是执行的时候在客户端一输入一个值,然后就没有反应了,没有实现设想的功能,请问这个是怎么回事!!
服务器:
import java.io.*;
import java.net.*;
class server
{
public static void main(String[] args)
{
try
{
ServerSocket server=new ServerSocket(9999);
Socket s=server.accept();
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=in.readLine();
System.out.println(name);
bw.write("欢迎光临"+name+"JAVA世界");
bw.close();
s.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}

客户端:
import java.io.*;
import java.net.*;class client
{
public static void main(String[] args)
{
try
{
Socket c=new Socket(InetAddress.getLocalHost(),9999);
  BufferedReader in=new BufferedReader(new InputStreamReader(c.getInputStream()));
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(c.getOutputStream()));
System.out.println("请输入用户名:");
BufferedReader here=new BufferedReader(new InputStreamReader(System.in));
  String name=here.readLine();
out.write(name);
String fromserver=in.readLine();
  System.out.println(fromserver);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

解决方案 »

  1.   

    楼主建立在accept后加个循环语句就可以了,比如:
    while(true){
    你想做的事情。
    }
      

  2.   

    ServerSide:
    import java.net.*;
    import java.util.*;
    import java.io.*;public class Server
    {
    public static final int DEFAULT_PORT = 9999;
    private ServerSocket myServerSocket;
    private Bank  bank;
    private Hashtable myCustomerDatabase;

    public Server()
    {
    bank = new Bank ("Bank of Monash");
    myCustomerDatabase = new Hashtable();
    for (int i=0; i < bank.getCustomers().size(); i++)
    myCustomerDatabase.put(Integer.toString(i), bank.getCustomers().get(i));
    startServer();
    }

    private void startServer()
    {   myServerSocket = null;
            try {
                myServerSocket = new ServerSocket(DEFAULT_PORT);
            } catch (IOException e) {
                System.err.println("Could not listen on port: "+DEFAULT_PORT);
                System.exit(1);
            }        Socket clientSocket = null;
            try {
                clientSocket = myServerSocket.accept();
            } catch (IOException e) {
                System.err.println("Accept failed.");
                System.exit(1);
            }try{   PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
    new InputStreamReader(
    clientSocket.getInputStream()));
            String inputLine, outputLine;
            outputLine =null;
            out.println(outputLine);
            System.out.println("**** Listening for socket");
            while (true) {
              if((inputLine = in.readLine()) == null)
              continue;
                 else{outputLine = retrieveDatabase(inputLine);
                 out.println(outputLine);
                 if(!outputLine.equalsIgnoreCase("Customer Not Found - exit"))
                 {System.out.println("**** Recevied Request : "+inputLine);
                 System.out.println("**** Response to the Client : "+outputLine);
                 System.out.println("#########################################");
                 System.out.println("**** Listening for socket");
            }
            }
            }
            }
        catch (IOException eee){
         System.out.println(eee);
        }}
    private String retrieveDatabase(String id)
    {   Object result = null;
    result = myCustomerDatabase.get(id);
    if (result == null)
    return "Customer Not Found - " + id;
    return result.toString();
    } public static void main(String[] args)
    {
    new Server();
    }
    }
    ClientSide:
    import java.net.*;
    import java.io.*;public class Client
    {
    public static final int  DEFAULT_PORT = 9999;
    public static final String DEFAULT_HOST = "localhost";

    private BufferedReader myKeyboardReader = null;

    public Client()
    {
    myKeyboardReader = new BufferedReader(new InputStreamReader(System.in)); startClient();
    }

    private void startClient()
    {
    Socket kkSocket = null;
            PrintWriter out = null;
            BufferedReader in = null;        try {
                kkSocket = new Socket(DEFAULT_HOST, DEFAULT_PORT);
                out = new PrintWriter(kkSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
            } catch (UnknownHostException e) {
                System.err.println("Don't know about host: "+DEFAULT_HOST+".");
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Couldn't get I/O for the connection to: "+DEFAULT_PORT+".");
                System.exit(1);
            }  try{  BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String fromServer;
            String fromUser;
            boolean whetherPrint=false;
            while ((fromServer = in.readLine()) != null) {
                if(whetherPrint){System.out.println("**** Response from the Server : " + fromServer);
                System.out.println();
                System.out.println("#######################################");
                }
                whetherPrint=true;
                System.out.print("**** Please input a Customer id : ");
            fromUser = stdIn.readLine();
        if (fromUser != null) {
                out.println(fromUser);
        }
        if(fromUser.equalsIgnoreCase("exit")){
         break;
        }
            }
            out.close();
            in.close();
            stdIn.close();
            kkSocket.close();}
            catch(IOException ee){
            }
        }
    public static void main(String[] args)
    {
    new Client();
    }
    }
    AccoutClass:
    public class Account
    {
        private float balance = 0.0F;    public Account()
          {
          }    public Account(float initialBalance)
          {
      balance = initialBalance;
          }    public void deposit(float amount)
          {
      balance += amount;
          }    public boolean withdraw(float amount)
          {
      if (balance - amount >= 0)
        {
    balance -= amount;
    return true;
        }
      else
        return false;
          }    public float getBalance()
          {
      return balance;
          }
    }
    BankClass:
    import java.util.*;public class Bank
    {
        private ArrayList customers = new ArrayList();
        private String name;    public Bank(String name)
        {
    this.name = name;
    ArrayList customers = new ArrayList();
            Customer me = new Customer("Chris Ling", 10000);
    customers.add(me);
            customers.add(new Customer("Eddie Leung", 12000));
    customers.add(new Customer("Wojtek Goscinski", 14000));
    this.customers = customers;
        }    public ArrayList getCustomers()
        {
    return customers;
        }

    }
    CustomClass:
    public class Customer
    {
        private Account myAccount = null;
        private String name = "";    public Customer(String name, float initialBalance)
          {
      this.name = name;
      myAccount = new Account(initialBalance);      }    public void process()
          {
      System.out.println("The customer is " + name);
      System.out.println("Initial balance = " + myAccount.getBalance());
      myAccount.deposit(5000);
      System.out.println("Balance = " + myAccount.getBalance());
      if (myAccount.withdraw(10000))
        System.out.println("Balance = " + myAccount.getBalance());
        
          }    public String toString()

        return name + " " + myAccount.getBalance();
    }
    }
      

  3.   

    out.write(name);
    错了
    要用
    out.println();对应的in.readLine()sever写一行println
    client对应读一行readLine代码下载http://my.6cncn.cn