客户端和服务器之间无法通信

问题描述 投票:0回答:2

我的服务器程序

import java.net.*;
import java.io.*;
public class MultiServe implements Runnable 
{
    static ServerSocket ss;
    static Socket s;
    public void run()
    {
        String name=Thread.currentThread().getName();
        for(;;)
        {   

            try
            {
                System.out.println("thread:"+name+"ready to accept");
                s=ss.accept();
                System.out.println("thread:"+name+" accepted");
                PrintStream ps=new PrintStream(s.getOutputStream());
                ps.println("Thread"+name+"contacted You");
                String sz,str1;             
                BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
                BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));
                while(true)
                {
                while((sz=br.readLine())!=null)
                {
                    System.out.println(sz);
                    str1=bk.readLine();
                    ps.close();
                    br.close();
                    bk.close();
                    s.close();
                }
                }

            }catch(Exception e){}

        }       
    }
    public static void main(String args[]) throws IOException
    {
        MultiServe ms=new MultiServe();
        ss=new ServerSocket(8080);
        Thread t=new Thread(ms,"one");
        Thread t1=new Thread(ms,"two");
        t.start();
        t1.start();



    }
}

我的客户程序

import java.net.*;
import java.io.*;
public class MultiClient
{
    public static void main(String args[])throws Exception
    {
        Socket s=new Socket("localhost",8080);
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str,str1;
        DataOutputStream ds=new DataOutputStream(s.getOutputStream());
        BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));
        while(!(str=bk.readLine()).equals("exit"))
        {
            ds.writeBytes(str+"\n");
            str1=br.readLine();
            System.out.println(str1);
        }
        ds.close();
        bk.close();
        br.close();
        s.close();
    }
}

套接字编程的新手,但我可以连接但无法通信。 我不知道它是否已经陷入僵局。 两者都在连接,但没有收到任何消息。

java sockets serversocket
2个回答
0
投票

这是因为您的try catch块.. try块内肯定有一些错误。 您有两个线程在同一套接字上等待。 当有人连接时,两者都试图接受它。


0
投票

您的代码不正确。

  1. 您正在同一套接字上运行两个线程。
  2. 客户端中DataOutputStream writeBytes(String)方法将字符串写为字节数组,其中,服务器上BufferedReaderreadLine()方法需要一行文本。 在这里,您可以在客户端中使用PrintStream

  3. 如果要继续在此套接字上进行读取,则无法在每次读取后在服务器上关闭流。

  4. 如果要读取客户端上的一行,则还需要从服务器上写一些东西。

请尝试以下代码以达到预期的效果:

服务器:

public class Server implements Runnable 
{
    static ServerSocket ss;
    static Socket s;
    public void run()
    {
        String name=Thread.currentThread().getName();
        for(;;)
        {   

            try
            {
                System.out.println("thread:"+name+"ready to accept");
                s=ss.accept();
                System.out.println("thread:"+name+" accepted");
                PrintStream ps=new PrintStream(s.getOutputStream());
                ps.println("Thread"+name+"contacted You");
                String sz,str1;             
                BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
                BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));

                while((sz=br.readLine())!=null)
                {
                    System.out.print(sz+"\nYour Msg:");
                    str1=bk.readLine();
                    ps.println(str1);

                }
                ps.close();
                br.close();
                bk.close();
                s.close();

            }catch(Exception e){
                e.printStackTrace();
            }

        }       
    }
    public static void main(String args[]) throws IOException
    {
       Server ms=new Server();
        ss=new ServerSocket(8080);
        Thread t=new Thread(ms,"one");
        //Thread t1=new Thread(ms,"two");
        t.start();
        //t1.start();



    }
}

客户:

public class Client
{
    public static void main(String args[])throws Exception
    {
        Socket s=new Socket("localhost",8080);
        BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
        String str,str1;
        PrintStream ps = new PrintStream(s.getOutputStream());
        BufferedReader bk=new BufferedReader(new InputStreamReader(System.in));

        System.out.print(br.readLine()+"\nEnter:");
        while(!(str=bk.readLine()).equals("exit"))
        {
            ps.println(str);

            str1=br.readLine();
            System.out.print(str1+"\nEnter:");
        }
        ps.close();
        bk.close();
        br.close();
        s.close();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.