我试图在客户端和服务器之间实现TCP发送和接收程序。他们交换信息。通过使用循环连续。客户端首先发送消息。没有循环,程序可以正常工作,但是循环,它不会。以下是计划:
public static void main(String[] args) {
// SERVER
try
{
ServerSocket s = new ServerSocket(11);
Socket s1 = null;
int i=0;
while (true)
{
s1 = s.accept();
BufferedReader b = new BufferedReader(new InputStreamReader(s1.getInputStream()));
PrintWriter p = new PrintWriter(new OutputStreamWriter(s1.getOutputStream()));
String m;
while ((m=b.readLine())!=null)
{
i++;
System.out.print(m);
p.print("reply"+i);
}
}
}catch(IOException e){}
}
public static void main(String[] args) throws IOException {
// CLIENT
Socket s = new Socket("192.168.100.3",11);
int i = 0;
PrintWriter p = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
p.print("msg"+i);
BufferedReader b = new BufferedReader(new InputStreamReader(s.getInputStream()));
while (true){
PrintWriter p1 = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader b1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
String m;
while((m=b1.readLine())!=null)
{
System.out.print(m);
p1.print("msg"+i);
}
i++;
p1.flush();
}
}
答案 0 :(得分:0)
当您使用readLine()
时,它会读到行尾。
但是,print(x)
不会写新换行符。
如果您编写并刷新println(x)
,则文本末尾会有一个新行供您阅读。
答案 1 :(得分:0)
在同一个套接字上循环和接受是否有意义?如:
Socket s1 = null;
while (true) {
s1 = s.accept();
此外,我认为它不会像你在代码中那样在端口11上工作。尝试1024以上的端口号,那些没有特权。
答案 2 :(得分:0)
此代码只会死锁。两端都在阅读。有人需要先发送一些内容,确保它是行终止的,以便同行的readLine()
调用将返回。