小弟最近在研究Socket编程,按照网上的例子写了如下代码模拟客户端功能:
package jack.netprogram;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;public class TalkServer {

public static void main(String args[]){
try {
ServerSocket server = new ServerSocket(1803);
Socket socket = server.accept();
BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
PrintWriter os = new PrintWriter(socket.getOutputStream());
BufferedReader is = new BufferedReader(new InputStreamReader(socket.getInputStream()));

String readline = null;
System.out.println("Client:"+is.readLine());
readline = sin.readLine();
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Server:" + readline);
System.out.println("Client:" + is.readLine());

readline = sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
但却达不到我想要的要求,即在一个程序里用键盘模拟客户端发送数据给服务器,服务器接收并显示出收到的数据再logcat里!!!是不是不能再同一个程序里模拟客户服务器的功能。小弟最近开始Socket编程,求达人指导!

解决方案 »

  1.   

    你都没有客户端。server.accept()开始就一直等待连接了。
      

  2.   

    楼上正确你还需要一部分客户端程序:Socket client = new Socket("localhost",1083);//连接到你上面创建的ServerSocket
    ///然后,后面发数据吧
    当然可以在一个程序同时启动服务端和客户端,你分两个线程就可以了。一个线程用来创建ServerSocket,另外一个线程用来创建Socket就行。
      

  3.   

    我新建了客户端
    Socket client = new Socket("localhost",1083);
      

  4.   

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Test { public static void main(String[] args) throws Exception {
    new TalkServer().start();
    Thread.sleep(100);//调整时间,让服务端准备好
    new Client().start();
    }

    static class TalkServer extends Thread { public void run() {
    try {
    ServerSocket server = new ServerSocket(1803);
    Socket socket = server.accept();
    BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter os = new PrintWriter(socket.getOutputStream());
    BufferedReader is = new BufferedReader(new InputStreamReader(
    socket.getInputStream())); String readline = null;
    System.out.println("Client:" + is.readLine());
    readline = sin.readLine();
    while (!readline.equals("bye")) {
    os.println(readline);
    os.flush();
    System.out.println("Server:" + readline);
    System.out.println("Client:" + is.readLine()); readline = sin.readLine();
    }
    os.close();
    is.close();
    socket.close();
    server.close();
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
    } static class Client extends Thread {
    public void run() {
    try{
    Socket client = new Socket("localhost", 1803);
    BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
    PrintWriter os = new PrintWriter(client.getOutputStream());
    BufferedReader is = new BufferedReader(new InputStreamReader(client.getInputStream()));
    String readline = sin.readLine();
    os.println(readline);
    os.flush();
    System.out.println("Server:" + is.readLine());
    }catch(Exception ex){ex.printStackTrace();}
    }
    }
    }
    你这个程序,客户端和服务端放在一起有点小问题,不过应当是可以通信的。