套接字编程客户端服务器java

时间:2016-02-25 19:30:40

标签: java network-programming

我试图在客户端和服务器之间实现TCP发送和接收程序。他们交换信息。通过使用循环连续。客户端首先发送消息。没有循环,程序可以正常工作,但是循环,它不会。以下是计划:

public static void main(String[] args)  {
    // SERVER

    try
    {
        ServerSocket s = new ServerSocket(11);
        Socket s1 = null;
        int i=0;
        while (true)
        {
            s1 = s.accept();
            BufferedReader b = new BufferedReader(new InputStreamReader(s1.getInputStream()));
            PrintWriter p = new PrintWriter(new OutputStreamWriter(s1.getOutputStream()));
            String m;
            while ((m=b.readLine())!=null)
            {
                i++;
                System.out.print(m);
                p.print("reply"+i);
            }
        }

    }catch(IOException e){}

}

public static void main(String[] args) throws IOException {
    // CLIENT

    Socket s = new Socket("192.168.100.3",11);
    int i = 0;

    PrintWriter p = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

    p.print("msg"+i);
    BufferedReader b = new BufferedReader(new InputStreamReader(s.getInputStream()));

    while (true){
        PrintWriter p1 = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));

        BufferedReader b1 = new BufferedReader(new InputStreamReader(s.getInputStream()));

        String m;
        while((m=b1.readLine())!=null)
        {               
            System.out.print(m);
            p1.print("msg"+i);
        }
        i++;
        p1.flush();
    }
}

3 个答案:

答案 0 :(得分:0)

当您使用readLine()时,它会读到行尾。

但是,print(x)不会写新换行符。

如果您编写并刷新println(x),则文本末尾会有一个新行供您阅读。

答案 1 :(得分:0)

在同一个套接字上循环和接受是否有意义?如:

Socket s1 = null;
while (true) {
  s1 = s.accept();

此外,我认为它不会像你在代码中那样在端口11上工作。尝试1024以上的端口号,那些没有特权。

答案 2 :(得分:0)

此代码只会死锁。两端都在阅读。有人需要先发送一些内容,确保它是行终止的,以便同行的readLine()调用将返回。