【发布时间】:2016-10-09 02:56:05
【问题描述】:
我正在尝试制作一个小型 TCP 服务器/客户端。我有一个客户端和一个服务器,在解决了一些基本的异常之后,没有任何效果。 客户端应该将(用户)数据发送到服务器(在端口 6789,本地主机),然后服务器应该将其以大写形式写入并结束。一切似乎都有效,除了发回大写字母。代码如下:
TCP服务器:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class TCPServer {
public static void main(String[] args) throws Exception {
System.out.println("SERVER");
String clientSentence;
String capitalizedSentence;
ServerSocket server = new ServerSocket(6789);
TCPClient.main(null);
while (true) {
Socket connection = server.accept();
System.out.println("<S> Connection!");
BufferedReader fromClient = new BufferedReader(
new InputStreamReader(connection.getInputStream()) );
DataOutputStream toClient = new DataOutputStream(connection.getOutputStream());
clientSentence = fromClient.readLine();
System.out.println("<S> Recieved: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() + '\n';
System.out.print("About to send: " + capitalizedSentence);
toClient.writeBytes(capitalizedSentence);
}
}
}
TCP客户端:
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) throws Exception {
System.out.println("CLIENT");
String sentence;
String modSentence;
BufferedReader inUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientToServer = new Socket("localhost", 6789);
DataOutputStream outServer = new DataOutputStream(clientToServer.getOutputStream());
BufferedReader inServer = new BufferedReader(
new InputStreamReader(clientToServer.getInputStream()) );
System.out.println("<C> Type now: ");
sentence = inUser.readLine();
System.out.println("<C> Got it!");
System.out.println("<C> Sending " + sentence + " to server...");
outServer.writeBytes(sentence + '\n');
outServer.flush();
System.out.println("<C> Server respodse:");
modSentence = inServer.readLine();
System.out.println("<C> From server: " + modSentence);
clientToServer.close();
}
}
控制台:
SERVER
CLIENT
<C> Type now:
efd
<C> Got it!
<C> Sending efd to server...
<C> Server respodse:
asd
还有……
什么都没有
【问题讨论】:
-
您忘记刷新服务器的响应
-
我想我明白了(终于)!这可能与我在同一个线程上运行客户端和服务器的事实有关,对吧?这样循环永远不会被访问
-
这些是独立的程序,它们在不同的进程上运行
-
顺便说一句:很好的编码风格。特别是变量的命名非常好。我将事情推进到更多的方法中,但是对于一个新手来说,非常好的代码!