日期:2014-05-17  浏览次数:20873 次

Socket相关
现有一个项目,java做服务端,c#做客户端,通过Socket进行通信。

功能主要是c#发送一个字符串给服务端,服务端返回对应的数据。

现在遇到的问题是:

由于起初对C#不了解,采用的方式就是发送在一次socket的send之后,recieve一次数据,并没有起一个线程不断的循环接收数据。

现在要实现服务端主动发送通知给客户端,之前采用的方式就不可用了,现在就需要整体的调整。现在如果要起一个线程来recieve数据的话,由于客户端收到的数据会在不同窗体上展示,收到的数据就不清楚具体要给哪个窗体用。不知道如何解决这一问题。

不知道有没有描述清楚,求助大家了,谢谢。

------解决方案--------------------
那要看他返回什么数据,这个应该有个区分机制,然后按规则传个委托。如果数据没有区分机制,那真的没办法
------解决方案--------------------
坐等大神来解答
------解决方案--------------------
收到数据,去触发事件,需要用到数据的窗体去绑定这个事件,这样就会在触发事件时,通知窗体了
------解决方案--------------------
引用:
收到数据,去触发事件,需要用到数据的窗体去绑定这个事件,这样就会在触发事件时,通知窗体了

+1
------解决方案--------------------
和服务端通信,至少应该知道数据是要干什么用的吧?
这就好比WebService接口中定义的方法名一下,不同的方法返回不同的数据
知道当前收到的数据是干什么用的,就应该知道是要给哪个窗体用,触发相应的事件
------解决方案--------------------
哈哈 我自己写的通信也遇到了这样的问题了 
我说下WCF的回掉方法(起一个线程来接受)和普通方法(你现在的Send一下接受一下)是必须分开的
也就是说 WCF一个服务如果包含回掉方法 就不能有普通方法 有普通方法就不能有回掉方法
个人感觉 如果你要实现这种新的效果 就比如自己重新写一个通信
例如我的通信框架是服务器端监听两个端口
一个端口是普通方法另一个端口专门负责回掉方法
如果考虑效率的话 必须这样!
------解决方案--------------------
短链接就是这样 
------解决方案--------------------
你必须开两个端口 
。。。此处略去100字
刚才上面略去的想说一种新方法 但是不实用。。。
也可以实现 要好多代码都要改 还要封装许多状态 而且要加上缓存 另外你发送的内容和接受的内容都要在封装
总体东西太多。。。而且你所有的send和receiver方法都要改。。。只能说你原来没想到要用到这种效果 设计的时候没想到。。。
------解决方案--------------------
引用:
Quote: 引用:

短链接就是这样 

这样说的话,另起的那个端口就应该算是长连接了把。

请问下一般情况下如何保证长连接呢?

还有send一下,revieve一下的情况,如果socket不中断,是不是也算长连接了。只不过没有一直在通信而已

我想你搞反了,网络通信中所谓的长连接是利用socket来实现的,长连接要注意客户端的状态,通常可以用心跳包
------解决方案--------------------
 呵呵   我 也在 搞着一块学习了