【发布时间】:2012-01-08 23:29:22
【问题描述】:
我有一个实现 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();
}
这不是一个真正的应用程序。我正在学习。
【问题讨论】:
-
质数实现不正确..但不需要任何东西..只是想测试消息是否正在传输..一旦完成..我会很好地写素数实现..
-
根据我对 Java 套接字的了解,您做得正确。您的端口是否已转发且您的防火墙已关闭?
-
那么,澄清一下:问题是服务器收到质数,但客户端从来没有收到响应?
-
@chradcliffe 服务器无法接收 num..我在解析后插入了一个 SOPln(num) 语句..但没有得到任何输出..
-
那么最终的解决方案是什么..我应该切换到 DataInputStream 还是 ObjectInputStream.. 没有办法用 InputStream 做到这一点..
标签: java sockets serversocket