javatcp-服务器&;客户正在工作,但可以';我得不到答案
我正在尝试制作一个小型TCP服务器/客户端。我有一个客户机和一个服务器,在解决了一些基本的异常之后,什么都不起作用。 客户端应该将(用户)数据发送到服务器(在端口6789,localhost),然后服务器应该用大写字母写数据并将其返回。除了发回大写字母外,一切似乎都正常。代码如下: TCPServer:javatcp-服务器&;客户正在工作,但可以';我得不到答案,java,tcp,Java,Tcp,我正在尝试制作一个小型TCP服务器/客户端。我有一个客户机和一个服务器,在解决了一些基本的异常之后,什么都不起作用。 客户端应该将(用户)数据发送到服务器(在端口6789,localhost),然后服务器应该用大写字母写数据并将其返回。除了发回大写字母外,一切似乎都正常。代码如下: TCPServer: import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.InputStreamReader;
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);
}
}
}
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.InputStreamReader;
导入java.net.ServerSocket;
导入java.net.Socket;
公共类TCPServer{
公共静态void main(字符串[]args)引发异常{
System.out.println(“服务器”);
字符串介词句;
字符串大写的插入;
ServerSocket服务器=新的ServerSocket(6789);
TCPClient.main(空);
while(true){
套接字连接=server.accept();
System.out.println(“连接!”);
BufferedReader fromClient=新的BufferedReader(
新的InputStreamReader(connection.getInputStream());
DataOutputStream-toClient=新的DataOutputStream(connection.getOutputStream());
client句子=fromClient.readLine();
System.out.println(“接收:+client句子”);
CapitalizedEntence=ClientSession.toUpperCase()+'\n';
System.out.print(“即将发送:+capitalizedSentence”);
toClient.writeBytes(大写);
}
}
}
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();
}
}
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.InputStreamReader;
导入java.net.Socket;
公共类TCPClient{
公共静态void main(字符串[]args)引发异常{
System.out.println(“客户”);
串句;
串句;
BufferedReader inUser=新的BufferedReader(新的InputStreamReader(System.in));
Socket clientToServer=新套接字(“localhost”,6789);
DataOutputStream outServer=新的DataOutputStream(clientToServer.getOutputStream());
BufferedReader inServer=新的BufferedReader(
新的InputStreamReader(clientToServer.getInputStream());
System.out.println(“立即键入:”;
语句=inUser.readLine();
System.out.println(“明白了!”);
System.out.println(“发送”+句子+“到服务器…”);
outServer.writeBytes(句子+'\n');
outServer.flush();
System.out.println(“服务器响应:”);
ModSession=inServer.readLine();
System.out.println(“来自服务器:”+ModSession);
clientToServer.close();
}
}
控制台:
SERVER
CLIENT
<C> Type now:
efd
<C> Got it!
<C> Sending efd to server...
<C> Server respodse:
asd
服务器
客户
现在键入:
efd
知道了!
正在将efd发送到服务器。。。
服务器响应:
自闭症
而且
没有任何内容您正在客户端进行刷新,但不是在服务器端 只需添加一个
toClient.flush()
在服务器端也打电话 答案是:
我很笨
我不小心让客户端和服务器在同一个线程上运行。我现在使TCPClient
aRunnable
一切都按计划进行
注:
TCPClient.main(null)
不会启动新的程序/线程,只是同一个线程,另一个静态函数。您忘了刷新服务器的响应我想我(终于)找到了!这可能与我在同一个线程上运行客户机和服务器有关,对吗?这样,循环就永远不会被访问。这些是独立的程序,它们在独立的进程上运行。顺便说一句:很好的编码风格。尤其是变量的命名非常好。我把东西推到了更多的方法中,但是对于一个新手来说,代码真的很好!