我正在尝试开发一个简单的解决方案,允许我通过服务器将数据从2个客户端传递给彼此。
我对Java很新,所以这对我来说非常棘手。我目前拥有的是一个与服务器建立连接的构造函数,服务器将在连接成功时进行回复(此时此作用)。
我的应用程序是一个GUI程序,所以我认为我最好的选择是将连接放入paintComponent,因为有一个计时器附加到此,所以希望计时器的每个滴答都将数据发送到服务器,但是这只会使程序崩溃。
最好的方法是什么 -
这是我的客观最终目标。
我的代码很基本,我真的不知道我的下一步是什么 -
客户 -
Socket clientSocket = null;
DataOutputStream os = null;
BufferedReader is = null;
String request;
String responseLine;
String data;
try {
clientSocket = new Socket("LocalHost", 5000);
os = new DataOutputStream(clientSocket.getOutputStream());
is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("Dont know host name!");
}
catch (IOException e) {
System.err.println("Couldnt get I/O for connection");
}
if (clientSocket != null && os != null && is != null) {
try {
request = "Hello Server \n";
os.writeBytes(request);
System.out.println("Client: " + request);
if((responseLine = is.readLine()) != null){
System.out.println("SERVER: " + responseLine);
}
//os.close();
//is.close();
//clientSocket.close();
}
catch (UnknownHostException e) {
System.err.println("Trying to connect to unknown host: " + e);
} catch (IOException e) {
System.err.println("IOException: " + e);
}
}
服务器 -
ServerSocket service = null;
Socket server = null;
BufferedReader is;
DataOutputStream os;
String line;
try {
service = new ServerSocket(5000, 2);
} catch (IOException e) {
System.out.println(e);
}
try {
server = service.accept();
is = new BufferedReader(new InputStreamReader(server.getInputStream()));
os = new DataOutputStream(server.getOutputStream());
if( (line = is.readLine()) != null) {
String text = is.toString();
System.out.println("Data: " + text);
}
os.close();
is.close();
server.close();
}
catch (IOException e) {
System.out.println(e);
}
答案 0 :(得分:0)
您尚未为request
分配任何内容。
如果你有,在你发布的代码之外,它不包含行终止符,所以你正在阅读行而不是写行。
您正在与读者和作家混合流。
您正在捕获异常,然后继续进行,就像它们没有发生一样。依赖于先前try
块中代码成功的代码应位于同一try
块内。