[英]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.防火墙通常只是丢弃数据包,这会导致连接超时而不是拒绝。
您确定可以在这些系统之间建立连接吗? 我已经在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.