简单的套接字程序

时间:2012-08-30 17:10:30

标签: java

嘿伙计们我正在尝试编写一个简单的套接字程序,它基本上像客户端的“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 个答案:

答案 0 :(得分:2)

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

要么使用绝对路径

java.net.ServerSocket clientSocket = new java.net.ServerSocket(5932)

答案 1 :(得分:1)

您尚未发布import语句。类ServerSocketSocket等属于包java.net。仔细检查您在课程开头是否有导入语句。

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

答案 2 :(得分:1)

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

<强> ORIGINAL
处理ServerSocket抛出的异常时,语法错误。

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

看起来您在最后一行的末尾缺少.println(e);

答案 3 :(得分: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
    }



}