0

嘿伙计们,我正在尝试编写一个简单的套接字程序,该程序基本上从客户端发送“Hello”消息,然后服务器获取并打印出来。

我正在尝试遵循本指南: http ://www.javaworld.com/jw-12-1996/jw-12-sockets.html?page=4

但是,当我尝试使用端口号实例化 serverSocket 时,会导致语法错误,建议删除参数或为该方法创建新的构造函数。当我尝试使用它时,它也无法识别 accept() 方法。有谁知道为什么会这样?

这是我的客户代码:

public static void main(String[] args) throws UnknownHostException, IOException 
{
    Socket testSocket = null;
    DataOutputStream os = null;
    DataInputStream is = null;

    try
    {
        testSocket = new Socket("192.168.0.104", 5932);
        os = new DataOutputStream(testSocket.getOutputStream());
        is = new DataInputStream(testSocket.getInputStream());
    }
    catch (UnknownHostException e)
    {
        System.err.println("Couldn't find Host");
    }
    catch (IOException e)
    {
        System.err.println("Couldn't get I/O connection");
    }

    if (testSocket != null && os != null && is != null)
    {
        try
        {
            os.writeBytes("Hello Server!\n");

            os.close();
            is.close();
            testSocket.close();

        }

        catch (UnknownHostException e)
        {
            System.err.println("Host not found");
        }
        catch (IOException e)
        {
            System.err.println("I/O Error");
        }
    }

}

这是我的服务器代码(更新):

public static void main(String[] args) 
{
    String line = new String() ;


    try
    {
       ServerSocket echoServer = new ServerSocket(5932);

       Socket clientSocket = echoServer.accept();

      DataInputStream  is = new DataInputStream(clientSocket.getInputStream());
      PrintStream os = new PrintStream(clientSocket.getOutputStream());

           while (true) {
             line = is.readLine();
             os.println(line); 
           }
    }
    catch (IOException e)
    {
        System.out.println(e.getMessage());
    }

}

以下是实际截图。

错误1:http: //i.imgur.com/8JIOd.png 错误2: http : //i.imgur.com/7uCow.png

4

4 回答 4

2

您的类名为 ServerSocket。它没有采用 int 的构造函数。将您的类命名为其他名称,以免与 java.net.ServerSocket 冲突。

要么使用绝对路径

java.net.ServerSocket clientSocket = new java.net.ServerSocket(5932)
于 2012-08-30T17:46:13.043 回答
1

您尚未发布进口声明。类ServerSocketSocket属于包java.net。仔细检查您在课程开始时是否有导入语句。

类似的东西import java.net*。或者,更好地使用 IDE 来帮助您。Eclipse 中的 Ctrl-Shift-O 将完成这项工作。

于 2012-08-30T17:17:14.530 回答
1

基于屏幕截图的编辑
您定义的类被命名ServerSocket。这隐藏了您尝试使用的实际类。您的类没有实现一个接受int并且没有定义的构造函数accept(),这些是您收到的错误。您不应将您的类命名为与另一个现有类相同的名称,因为它会导致这些类型的错误和进一步的混淆。

ORIGINAL
当您处理由ServerSocket.

try
{
    echoServer = new ServerSocket(5932);
}
catch (IOException e)
{
    System.out
}

看起来你.println(e);从最后一行的末尾丢失了。

于 2012-08-30T17:20:22.600 回答
1

试试这个方法......

-首先检查您是否已正确导入包java.net.*

public static void main(String[] args) 
{

    String line = new String() ;


    try
    {
       ServerSocket echoServer = new ServerSocket(5932);

       Socket clientSocket = echoServer.accept();

      DataInputStream  is = new DataInputStream(clientSocket.getInputStream());
      PrintStream os = new PrintStream(clientSocket.getOutputStream());

           while (true) {
             line = is.readLine();
             os.println(line); 
           }
    }
    catch (IOException e)
    {
        System.out
    }



}
于 2012-08-30T17:20:24.490 回答