【发布时间】:2014-01-02 21:52:32
【问题描述】:
我正在尝试使用套接字创建简单的套接字应用程序,以将流从 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");
}
}
}
Client.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)
【问题讨论】:
-
我猜这是小端与大端的问题。
-
如果是这种情况,是否有可能以某种方式解决它?
-
'System.out.print("'\n");'
-
1.定义“不起作用”。 2. 摆脱 ready() 循环。这实际上是在浪费时间。 readLine() 调用将阻塞。 3. 当你遇到异常时,打印它,而不是你自己设计的一些疯狂的文本。请修复所有这些并在此处发布实际异常。
标签: java linux windows sockets