我正在尝试将服务器写入客户端程序,但我无法与Java中的服务器通信。
这是我主要的代码块。
InetAddress addr = InetAddress.getLocalHost();
ipAddress = "78.162.206.164";
ServerSocket serverSocket = new ServerSocket(0);
String randomStringForPlayerName = RandomStringGenerator.generateRandomString();
baseForReqOpp += ipAddress + " " + serverSocket + " " + randomStringForPlayerName;
Socket socket = new Socket(host,2050);
socket.setSoTimeout(100);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream());
out.write(baseForReqOpp);
out.flush();
System.out.println(in.read());
我知道服务器代码没有问题,所有通讯端口都没问题。
但我无法从服务器上读到任何内容。
可能是什么问题?
答案 0 :(得分:3)
您必须在输入流
之前创建输出流答案 1 :(得分:2)
以下是一些与客户端和服务器套接字通信的工作代码。希望您可以根据您的具体问题进行调整。
public class SocketTest {
public void runTest() {
try {
// create the server
new SimpleServer().start();
// connect and send a message
InetAddress addr = InetAddress.getLocalHost();
Socket sock = new Socket(addr, 9090);
ObjectOutputStream out = new ObjectOutputStream(sock.getOutputStream());
out.writeObject("Hello server");
out.flush();
ObjectInputStream in = new ObjectInputStream(sock.getInputStream());
System.out.println("from server: " + in.readObject());
sock.close();
} catch (Exception e) {
e.printStackTrace();
}
}
// server has to run in a separate thread so the code doesn't block
private class SimpleServer extends Thread {
@Override
public void run() {
try {
ServerSocket sock = new ServerSocket(9090);
Socket conn = sock.accept();
// the code blocks here until a client connects to the server
ObjectInputStream in = new ObjectInputStream(conn.getInputStream());
System.out.println("from client: " + in.readObject());
ObjectOutputStream out = new ObjectOutputStream(conn.getOutputStream());
out.writeObject("Hello client");
out.flush();
sock.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
运行它:
new SocketTest().runTest();
答案 2 :(得分:0)
您的代码永远不会工作,因为您不使用线程。要启动服务器,您需要在代码中的某个位置调用accept
myServerSocket.accept();
这是阻止调用,即代码流停止直到客户端连接。但是因为你不能执行任何语句(记住accept
是阻塞的吗?)客户端如何连接?这个鸡和蛋的问题通过线程解决。请参阅霍华德的代码示例答案。
我没有看到对accept()
的任何调用,所以我想知道你的客户端连接到什么......