gpt4 book ai didi

java - 套接字无法接收数据

转载 作者:行者123 更新时间:2023-12-01 15:36:23 24 4
gpt4 key购买 nike

我有一个实现serversocket类的类,还有另一个实现客户端1.Socket类的类。

所以我正在尝试做的就是这个。获取流后,我希望客户端向服务器发送一个数字,服务器将依次响应客户端,无论它是否是素数。它显示在 awt.Label 中。

但我无法收到任何回复。

这是客户端构造函数的代码:

public ClientIsPrime()
{
setLayout(new GridLayout(2,2));
add(new Label("Enter a number: "));
add(numEntry=new TextField(10));
add(checkPrime=new Button("Check if number is Prime"));
add(result=new Label("Result is shown here"));

try
{
Socket client = new Socket(InetAddress.getLocalHost(), 5959);
in=client.getInputStream();
out=client.getOutputStream();
}catch(UnknownHostException e)
{
result.setText("Local Host cannot be resolved");
}catch(IOException e)
{
result.setText("IOException occured");
}

checkPrime.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
try
{
int num;
num=Integer.parseInt(numEntry.getText());
out.write(num);
out.flush();

int c;
result.setText("");
String s="";
while((c=in.read())!=-1)
s+=((char)c);
result.setText(s);
}catch(IOException e)
{
result.setText("IOException occured");
}catch(NumberFormatException e)
{
result.setText("Please enter a valid number.");
}
}
});
}

服务器代码:

public static void main(String args[])throws IOException
{
server=new ServerSocket(5959);

socket=server.accept();

System.out.println("connected");

InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();
int c; String numStr="";
while((c=in.read())!=-1)
numStr+=((char)c);
int num=Integer.parseInt(numStr);
if(num==3)
out.write("Number is Prime".getBytes());
else
out.write("Number is not Prime".getBytes());
out.flush();

in.close();
out.close();
}

这不是一个真正的应用程序。我正在学习。

最佳答案

一些问题。

首先,您的服务器实现永远不会退出 while 循环。 InputStream.read() 的 API 声明它将阻塞,直到收到数据或关闭流。流永远不会关闭,因此读取初始数据后将永远阻塞。

要解决这个问题,您必须决定您的协议(protocol)是什么。见下文。

另一个问题是您从客户端以解析的文本形式写入。所以说 13(作为一个整数)。但你随后会像阅读一系列字符一样阅读它。线路上的 13 将被读取为某个控制字符。您需要保持写入数据和读取数据的方式一致。

我的建议是制定一个基本协议(protocol)。在写入端使用 DataOutputStream,在读取端使用 DataInputStream,然后匹配两侧的读/写调用以确保一致。

关于java - 套接字无法接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8782353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com