我正在尝试使用套接字创建简单的套接字应用程序,以将流从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("哎呀!它没有用!");就像在捕获块中一样。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.防火墙通常只是丢弃数据包,这会导致连接超时而不是拒绝。
您确定可以在这些系统之间建立连接吗?我已经在Windows 7和Linux Mint上编译并运行了您的代码,并且它工作正常。
"它不起作用"是什么意思?它会抛出任何异常吗?如果没有任何输出,请尝试再次运行它并等待大约 30 秒。
对我来说,这只是一个网络问题。因此,您还应该尝试从linuxpingWindows机器,然后尝试远程登录到服务器。
编辑:
所以我们知道这是一个网络问题。首先尝试从Linux系统pingIP服务器。
ping 192.168.224.78
如果它不起作用,您应该检查两台计算机是否位于同一子网中,192.168.224.0
假设掩码255.255.255.0
。您只需要在控制台中键入ifconfig
。
在下一步中,您应该尝试禁用Windows防火墙。这是如何执行此操作的说明。