java-套接字readLine()不接收发送的行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-套接字readLine()不接收发送的行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2321字,纯文字阅读大概需要4分钟。
内容图文
![java-套接字readLine()不接收发送的行](/upload/InfoBanner/zyjiaocheng/695/2d4907f1b6d44c1f8812e3ed9bd3738f.jpg)
我正在建立一个客户服务器项目.
我需要的是客户端发送一个字符串,例如“ Pendu”,服务器接收该字符串,然后将一个名为“ Pendu”的对象发送回客户端.
这是我的代码:
// server
ServerSocket serverSocket = new ServerSocket(6789);
System.out.println("accepting...");
Socket socket = serverSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(socket.getInputStream()));
ObjectOutputStream outToClient = new ObjectOutputStream(socket.getOutputStream());
String clientMsg = inFromClient.readLine();
System.out.println("Received from client: " + clientMsg);
Object obj;
System.out.println("building object...");
obj = Class.forName("Data." + clientMsg).newInstance();
System.out.println("object built");
if(obj instanceof Pendu)
{
System.out.println("Send to client: " + obj);
outToClient.writeObject(new Pendu());
}
//client
Socket socket = new Socket("localhost", 6789);
DataOutputStream outToServer = new DataOutputStream(socket.getOutputStream());
System.out.println("sending...");
outToServer.writeBytes("Pendu");
System.out.println("sent");
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
System.out.println("receiving...");
Object obj = ois.readObject(); // it is blocked here and I don't know why
System.out.println("received");
Pendu类在数据包中定义:
package Data;
public class Pendu implements Serializable
{
private static final long serialVersionUID = 1L;
private static String[] words = new String[]{"bonjour", "bonsoir", "hier", "france", "ordinateur"};
private static Random rand = new Random();
private String but;
public Pendu()
{
this.but = words[rand.nextInt(words.length)];
}
public int getLenth()
{
return this.but.length();
}
public String getBut()
{
return this.but;
}
@Override
public String toString()
{
return "I'm a pendu object";
}
}
我的问题是:
首先,我执行服务器,然后可以看到控制台中显示了正在接受….
然后执行客户端,在控制台中,我收到如下消息:
sending...
sent
receiving...
同时,服务器端未显示任何新内容.
现在,我停止客户端,并显示服务器的所有其他消息:
Received from client: Pendu
building object...
object built
当然我也得到错误:
java.net.SocketException: Broken pipe
这是合乎逻辑的,因为我杀死了尚未完成接收的客户端.
我不知道为什么客户不能收到预期的结果.
解决方法:
您正在阅读的行,而不是在写行.您需要在“ Pendu”消息中添加行终止符.
注意:发送Pendu时,为什么要发送新的Pendu,而不是刚创建的Pendu?
内容总结
以上是互联网集市为您收集整理的java-套接字readLine()不接收发送的行全部内容,希望文章能够帮你解决java-套接字readLine()不接收发送的行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。