Java Socket编程中使用ObjectOutputStream 和 ObjectInputStream 出现问题
来源:互联网 发布:什么软件听书免费 编辑:程序博客网 时间:2024/04/29 17:57
今天写局域网聊天程序时遇到一个问题,就是 A给B发送消息1,然后发送消息2,B只能接受到2个消息1。截图是这样的:
在发送了 一个消息 你好 和一个消息 我是xxx 之后,另一端只能收到两次你好
解决办法就是在 ObjectOutputStream的对象发送之前调用 reset()方法,然后 flush;
代码如下:
package com.net;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.InetAddress;import java.net.Socket;import javax.swing.JTextArea;import com.protocol.netData;import com.protocol.netData.TYPE;public class chatSocketwithPro extends Thread{//自带协议的传输Socket chatSocket; ObjectOutputStream oos ;ObjectInputStream ois ;JTextArea showText;StringBuilder sb ;private netData recvdata,senddata; public chatSocketwithPro(Socket s) {sb = new StringBuilder();senddata = new netData(); this.chatSocket = s; try {oos = new ObjectOutputStream(chatSocket.getOutputStream());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void run() { read();}public void read(){try {ois = new ObjectInputStream(chatSocket.getInputStream());while(true){recvdata = null;recvdata = (netData) ois.readObject();TYPE p = recvdata.getType();if ( p.equals(TYPE.TYPE_CHAT)){//如果是聊天数据String text = showText.getText();sb.setLength(0);sb.append(text);sb.append(recvdata.getNeckName()+": "+recvdata.getData()+"\n");showText.setText(sb.toString());}else if( p.equals(TYPE.TYPE_FILE_REQ)){//如果是文件请求}else if( p.equals(TYPE.TYPE_FILE_END)){//如果是文件尾}else if(p.equals(TYPE.TYPE_FILE_DATA)){//文件数据}else if(p.equals(TYPE.TYPE_OTHER)){//其他数据}else{//未知?}}} catch (IOException e) {e.printStackTrace();System.out.println(e.getMessage());showText.setText(e.getMessage()+"\n对方已关闭聊天");showText.setEnabled(false);} catch (ClassNotFoundException e) {e.printStackTrace();}finally{try {ois.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void write(String message) {senddata.setType(TYPE.TYPE_CHAT);senddata.setData(message);try {//oos.reset();//加了这句就可以了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!oos.writeObject(senddata);oos.flush();} catch (IOException e) {System.out.println(e.getMessage());e.printStackTrace();}}public void closeSocket(){try {this.chatSocket.close();} catch (IOException e) {e.printStackTrace();}}public String getSocketHost(){InetAddress ia =chatSocket.getInetAddress();return ia.getHostAddress();}public void SetShowArea(JTextArea showtextArea) {showText = showtextArea;}}
不知道这样对不对,希望大神们指点一二
0 0
- Java Socket编程中使用ObjectOutputStream 和 ObjectInputStream 出现问题
- java中ObjectOutputStream和ObjectInputStream的使用
- Socket网络编程中使用ObjectInputStream与ObjectOutputStream的注意事项
- 使用 ObjectInputStream 和ObjectOutputStream 经常出现的问题
- java中在socket上重新建立ObjectInputStream和ObjectOutputStream的问题
- Java中ObjectOutputStream和ObjectInputStream的基本使用详解
- Java ObjectInputStream 和 ObjectOutputStream
- Java中ObjectInputStream 与 ObjectOutputStream的使用
- ObjectOutputStream 和 ObjectInputStream的使用
- Java IO ObjectInputStream和ObjectOutputStream
- java中使用ObjectOutputStream和ObjectInputStream时产生的“invalid stream header”错误解决方法
- IO流中ObjectOutputStream和ObjectInputStream的使用
- Java 流中关于ObjectInputStream 和ObjectOutputStream 的陷进
- ObjectInputStream与ObjectOutputStream的使用问题-01
- Java ObjectInputStream与ObjectOutputStream阻塞(block)问题
- 关于ObjectInputStream和ObjectOutputStream的顺序问题
- java中ObjectInputStream与ObjectOutputStream的认识
- java对象流ObjectInputStream、ObjectOutputStream的使用
- 第十六周实践项目(1)—验证算法1冒泡排序
- Js操作表格-对表格单元格的添加删除修改
- Spring MVC 构建入门级 Web 应用程序
- 分销商管理--代理模式
- SqlServer中wait type类型及说明
- Java Socket编程中使用ObjectOutputStream 和 ObjectInputStream 出现问题
- 第十四周 项目一 验证二叉排序树相关算法
- 第十三周-Floyd算法
- Access、Hybrid和Trunk三种模式的理解
- EJB到底是什么
- BOM学习
- sqlserver里面使用in查询与表join查询的区别
- 第9周SHH数据结构-【项目2-对称矩阵压缩存储的实现与应用(2)】
- 使用python语言结合beautifulsoup编写简单的网络爬虫