繁体   English   中英

套接字编程-客户端(Linux),服务器(Windows)

[英]Socket programming - Client (linux), server (Windows)

我正在尝试使用套接字创建简单的套接字应用程序,以将流从Linux(64x ArchLinux)发送到服务器(Windows XP)。

我在互联网上找到的我正在使用的代码,只是用来检查它是否有效。 有趣的是,如果我使用Windows XP(服务器)和Win 8(客户端),则代码可以完美地工作,但是当客户端在ArchLinux上时,它将无法正常工作。 有没有连接Windows-Linux的特殊方法?

服务器.java

import java.lang.*;
import java.io.*;
import java.net.*;

class Server_pzm {
   public static void main(String args[]) {
      String data = "Toobie ornaught toobie";
      try {
         ServerSocket srvr = new ServerSocket(1234);
         Socket skt = srvr.accept();
         System.out.print("Server has connected!\n");
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         System.out.print("Sending string: '" + data + "'\n");
         out.print(data);
         out.close();
         skt.close();
         srvr.close();
      }
      catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      }
   }
}

客户端.java

import java.lang.*;
import java.io.*;
import java.net.*;

class Client {
   public static void main(String args[]) {
      try {
         Socket skt = new Socket("192.168.224.78", 1234);
         BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));
         System.out.print("Received string: '");

         // while (!in.ready()) {} line removed
         System.out.println(in.readLine());  


         System.out.print("'\n");
         in.close();
      }
      /* lines removed catch(Exception e) {
         System.out.print("Whoops! It didn't work!\n");
      } */

      // added exception handling
      catch(UnknownHostException e) {
         e.printStackTrace();
      }
      catch (IOException e){
         e.printStackTrace();
      }

   }
}

编辑

抱歉,我没有指定不工作的意思。 我的意思是我遇到了一个异常,该异常后来打印了System.out.print(“哇!它不起作用!\\ n”); 就像大块头一样。 Win 8和Arch Linux安装在同一台笔记本电脑上,而代码在两个系统中的我的Dropbox文件夹中(因此代码是相同的)-在我回到笔记本电脑后,我将发布实际的异常

编辑2:

我更新了代码,这是我得到的例外:

java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at java.net.Socket.<init>(Socket.java:425)
        at java.net.Socket.<init>(Socket.java:208)

java.net.ConnectException:连接被拒绝

这有两个可能的含义。

  1. 您尝试连接的address:port上没有任何监听。
  2. 有一个防火墙规则。

可能性更高1.防火墙通常只是丢弃数据包,这会导致连接超时而不是拒绝。

您确定可以在这些系统之间建立连接吗? 我已经在Windows 7和Virtualbox的Linux Mint上编译并运行了您的代码,它可以正常运行。

您是什么意思“它不起作用”? 是否抛出任何异常? 如果您没有任何输出,请尝试再次运行它,然后等待大约30秒钟。

对我来说,这只是一个网络问题。 因此,您还应该尝试从Linux ping您的Windows计算机,然后尝试远程登录到服务器。

编辑:

因此,我们知道这是网络问题。 首先尝试从Linux系统ping IP服务器。

ping 192.168.224.78

如果不起作用,则应假设掩码为255.255.255.0 ,以检查两台计算机是否在同一子网192.168.224.0 您只需要在控制台中键入ifconfig

在下一步中,您应该尝试禁用Windows防火墙。 这是一个说明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM