Java Net基本客户端到服务器消息
嘿,我正在努力掌握一些基本的人际网络。到目前为止,我已经有了一个小程序来启动一个服务器,连接一个向服务器发送消息的客户端 现在我尝试让服务器响应一次,因此总结一下:Java Net基本客户端到服务器消息,java,sockets,networking,Java,Sockets,Networking,嘿,我正在努力掌握一些基本的人际网络。到目前为止,我已经有了一个小程序来启动一个服务器,连接一个向服务器发送消息的客户端 现在我尝试让服务器响应一次,因此总结一下: 服务器启动 客户端连接并发送消息 服务器接收消息,显示消息并发送回消息 客户端显示服务器消息并退出 但是我无法让它工作,它在客户端成功连接后停止工作。 这是客户: public class Client { public static void main(String[] args) throws Exception {
- 服务器启动
- 客户端连接并发送消息
- 服务器接收消息,显示消息并发送回消息
- 客户端显示服务器消息并退出
public class Client {
public static void main(String[] args) throws Exception {
try {
Socket sock = new Socket("localhost", 5151);
String msg = "Hello, I am a Client.";
if(sock.isConnected()) {
System.out.println("Connected to server!");
}
OutputStream ostream = sock.getOutputStream();
DataOutputStream dos = new DataOutputStream(ostream);
dos.writeBytes(msg);
InputStream istream = sock.getInputStream();
BufferedReader br1 = new BufferedReader(new InputStreamReader(istream));
String msgBack = br1.readLine();
System.out.println(msgBack);
br1.close();
dos.close();
ostream.close();
sock.close();
} catch(Exception e) {
System.out.println("Could not conenct to server.");
}
}
}
和服务器:
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket sock = new ServerSocket(5151);
System.out.println("Server is running!");
Socket client = sock.accept();
System.out.println("Client connected from " + client.getLocalAddress());
InputStream istream = client.getInputStream();
DataInputStream dis = new DataInputStream(istream);
String msg = dis.readLine();
System.out.println(msg);
OutputStream ostream = client.getOutputStream();
BufferedWriter bw1 = new BufferedWriter(new OutputStreamWriter(ostream));
String msgBack = "Thank you for connecting!";
bw1.write(msgBack);
bw1.close();
dis.close();
istream.close();
client.close();
sock.close();
}
}
谢谢你的帮助 什么不起作用?添加堆栈跟踪和您遇到的异常。我没有收到任何直接错误,只是在客户端连接后它“冻结”,好像它在等待什么。好吧,您的服务器被阻止,等待
String msg=dis.readLine()中的换行符代码>。由于您的客户端不发送一个,服务器将永远等待。如果将客户机行更改为dos.writeUTF(msg)
,将服务器行更改为String msg=dis.readUTF()
,则更有意义的是,您可以始终尝试使用调试器单步执行代码,以找出程序冻结的位置。