编写Android socket通信,想要服务器端向手机端发送消息,但会出现异常

每次发送第一次数据时可以成功,当之后的就会抛出异常10-3111:09:32.332:W/System.err(9570):java.io.EOFException10-... 每次发送第一次数据时可以成功,当之后的就会抛出异常
10-31 11:09:32.332: W/System.err(9570): java.io.EOFException
10-31 11:09:32.332: W/System.err(9570): at libcore.io.Streams.readFully(Streams.java:83)
10-31 11:09:32.340: W/System.err(9570): at java.io.DataInputStream.readFully(DataInputStream.java:99)
10-31 11:09:32.340: W/System.err(9570): at java.io.DataInputStream.decodeUTF(DataInputStream.java:178)
10-31 11:09:32.356: W/System.err(9570): at java.io.DataInputStream.decodeUTF(DataInputStream.java:173)
10-31 11:09:32.356: W/System.err(9570): at java.io.DataInputStream.readUTF(DataInputStream.java:169)
10-31 11:09:32.356: W/System.err(9570): at com.example.client.socket.run(socket.java:29)

我的代码是:
客户端:
try {
client_socket = new Socket("192.168.1.106",3333);
input = new DataInputStream(client_socket.getInputStream());
output = new DataOutputStream(client_socket.getOutputStream());

textString = input.readUTF();
System.out.println(textString);
textString = null;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
服务器:
try {
serversocket = new ServerSocket(3333);
System.out.println("listening 3333 port:");
String send_msg = "21.5";

while(true){
try {
Socket client_socket = serversocket.accept();
input = new DataInputStream(client_socket.getInputStream());
output = new DataOutputStream(client_socket.getOutputStream());

} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}

try {
output.writeUTF(send_msg);
output.close();
} catch (Exception e) {
}
展开
 我来答
hp362
2015-11-03 · TA获得超过313个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:132万
展开全部
服务端的 accept 之后 要在开一个线程 和 客户端 的socket (建立单一的信道)进行通信,才能保证是长连接 双方数据可以 持续发送,你说第一次可以 那是 你 TCP 三次握手成功后,你writeUTF(send_msg),你就 又把socket关闭了,信道就断了
更多追问追答
追问
是在服务器端写个线程里面是;

output.writeUTF(send_msg);吗
追答
在服务端的那个 accept之后 就要在开一个线程(run方法里面 使用就是 读流操作  写的操作 writeUTF 可以 封装成一个方法 )  把 client_socket对象 传到单独的线程里 , 服务端其余的保持代码 保持 你原先的,另外注意客户端 的 的读流操作(对应你的 input.readUTF()
)也要放在线程里死循环 写的操作(writeUTF)也封装成方法
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式