client是c++,server是java.客户端和server端保持长链接。
线程Child,启动socket服务
PrintStream ps = null;
private Socket client;
public void run(){
try{
ThreadCache.getIns().getHtMap().put(ip, client);//将当前连接信息寸到自己定义的一个map里,ip做为key
while(true){
byte[] length = new byte[4]; //这里是因为定义的报文格式前面4位是整个报文的长度 0123<root><content>.........</content></root>这样
dis.read(length); //下面是业务处理
}
上面一段都没有问题,客户端和server端得互相通信都正常。现在有个需求,从网页向server传个命令,再由server转发到client.
servlet b的内容
Map tmap=ThreadCache.getIns().getHtMap();
String key = getFriendIpAddress();//自定义方法,获取客户端ip
Socket client = tmap.get(key );
OutputStream os= client.getOutputStream();
ps=new PrintStream(os,true,"utf-8");
ps.write(msg.getBytes("utf-8"));//出错处
网页发送命令后,到server端获取连接为止都没有问题,到发送的时候就会报错
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.DataInputStream.read(DataInputStream.java:80)
at com.socket.Child.run(Child.java:48) //ChildTh就是保持长链接的那个线程
at java.lang.Thread.run(Thread.java:595)
网上查了下,关于杀软的原因排除,因为我是本机测试,防火墙和杀软我全部关掉的。不知道是不是由阻塞引起的,但是我获取的是client的输出流,并非输入流,应该没有数据等待的,哪位朋友有做过这快的指点一下。不盛感激。。
线程Child,启动socket服务
PrintStream ps = null;
private Socket client;
public void run(){
try{
ThreadCache.getIns().getHtMap().put(ip, client);//将当前连接信息寸到自己定义的一个map里,ip做为key
while(true){
byte[] length = new byte[4]; //这里是因为定义的报文格式前面4位是整个报文的长度 0123<root><content>.........</content></root>这样
dis.read(length); //下面是业务处理
}
上面一段都没有问题,客户端和server端得互相通信都正常。现在有个需求,从网页向server传个命令,再由server转发到client.
servlet b的内容
Map tmap=ThreadCache.getIns().getHtMap();
String key = getFriendIpAddress();//自定义方法,获取客户端ip
Socket client = tmap.get(key );
OutputStream os= client.getOutputStream();
ps=new PrintStream(os,true,"utf-8");
ps.write(msg.getBytes("utf-8"));//出错处
网页发送命令后,到server端获取连接为止都没有问题,到发送的时候就会报错
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:168)
at java.io.DataInputStream.read(DataInputStream.java:80)
at com.socket.Child.run(Child.java:48) //ChildTh就是保持长链接的那个线程
at java.lang.Thread.run(Thread.java:595)
网上查了下,关于杀软的原因排除,因为我是本机测试,防火墙和杀软我全部关掉的。不知道是不是由阻塞引起的,但是我获取的是client的输出流,并非输入流,应该没有数据等待的,哪位朋友有做过这快的指点一下。不盛感激。。
解决方案 »
- TOMCAT和DBCP一点疑问
- request.getParameter获取中文字符只能获取两个字符???
- 探讨URL传值附参与表单提交传参数的原理
- 问个搜索记录,出来相似度的问题
- 求助高手:jsp和sql server连接的问题
- 如何获取数据库datetime字段的年份?
- 在客户端机器上利用JSP页面查询本地局域网内数据库服务器A中的数据,再利用当前JSP页面上传到远程数据库B中能实现吗?有什么好的方案吗?
- java 开发WebService 中使用SoapHeader身份认证的问题
- 怎么读取上传文件里面的内容啊,
- 如何执行放在数据库里的一段jsp代码???
- Tomcat+Mysql连接池问题求教
- 用Hibernate找不到DB2中的序列
Socket client = tmap.get(key );
OutputStream os= client.getOutputStream();
ps=new PrintStream(os,true,"utf-8");
ps.write(msg.getBytes("utf-8"));//出错处
试验一下,直接向某个ip发msg会报错么?
这么一句话不能错啊。而且报的是Connection reset 应该连接都没有获取到