异步Socket!我的毕业设计,大侠们救命啊!

shmily_nnx 2003-04-09 09:39:44
我的毕业设计是做一个聊天程序,采用C/S结构。请问一下服务器AcceptRequest提供的Socket是否占用同一个端口???.NET里Socket不管是Remote还是Local的端口为什么都不能改?它能自动侦测未用端口,并且使用之么?
还有对于发送数据的byte[] buffer,其数组大小有限制吗?一定要1024或者127之类的,能再大一点么?比如几万几十万什么的,如果这样又有什么后果呢?
谢谢各位,小弟正在做毕业设计,还有很多问题等着救命!每次问题都是100分,不过大家互帮互助还是最关键的,呵呵

...全文
34 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
深圳峰哥 2003-08-05
  • 打赏
  • 举报
回复
监听之后再次监听,不需要重新绑定!
shmily_nnx 2003-04-13
  • 打赏
  • 举报
回复
marila,你好
看过你的文章,之前我在设计的时候都已经设计好了。现在是一些技术上比较细节的问题,应为我是负责socket和消息解释的。这两块我现在基本上都做好了。都已经测试过了。现在的问题是:监听停止之后再次监听,在绑定端口时抛出了异常
marila 2003-04-11
  • 打赏
  • 举报
回复
详细的结构设计昨天我已经写好了,你可以到“技术”栏目察看我的文章,有什么具体的问题可以直接在下面的评论中提出:)

http://www.csdn.net/Develop/Article/17/17912.shtm
shmily_nnx 2003-04-11
  • 打赏
  • 举报
回复
嘿,你好。很高兴看到你的建议:)
确实我把信息分类了,专门设计了一个class负责消息的合成和解释。
难道一个ServerSocket可以和多个客户连接?这个让我很难理解。以前用vb做这样的milestone时就是load sock[i]这种形式;现在.NET中我并没有觉得有大的改变,我的Listener接收到连接请求时就给出一个Socket,这时就实例化一个ServerSocket,Listener给出的Socket就作为构造函数的参数。能多给点解释么,谢谢。
现在我的问题是一个用户掉线之后,我要析构这个ServerSocket,然而没有什么东西可以让我析构,应为DotNet里的Socket没有析构,难道要用GC?如果是该怎么用呐?
期待着你的恢复:)
shmily_nnx 2003-04-10
  • 打赏
  • 举报
回复
小弟这几天备受煎熬!我将异步Socket封装成3中类型:客户端须连接的Socket,服务器监听的Listener和服务器端发送接收数据的Server都写成了Dll。这几天在测试的时候老是出现一个IDE的Exception让我很郁闷。盖了又改,还是出现:(说是什么InvalidOperation。正在我要放弃的时候,突然发现并非这些Socket引起的Exception。而是企图读取Server类中一个LocalEndPoint。天哪!这个能解释么?当然现在我已经注释掉了此语句。可是难道不能访问么?
marila 2003-04-10
  • 打赏
  • 举报
回复
另外,我觉得你在服务器端的设计似乎有点问题。

服务器端应该只需要建立一个ServerSocket就可以了,因为一个socket可以和多个socket建立通道,并不影响。我觉得应该从线程以及协议方面考虑,而不用过多的考虑socket的问题。

主要问题是线程间的数据共享/传输协议。
colin666 2003-04-10
  • 打赏
  • 举报
回复
up
marila 2003-04-10
  • 打赏
  • 举报
回复
问题可以这样解决:

服务器端:

1.首先服务器端建立一个服务器socket对象并设定一个端口用于一直侦听socket(端口肯定是可以自己设定的)。

2.当侦听到一个socket连接建立后,建立一个新的线程用于一直等待接收该socket发送的信息

3.服务器对象的方法中,应包括:

BuildSocketList:建立所有正在连接中的客户端socket的列表,当客户端失去连接(disconnected)时,从表中去除该socket

SendMessageCenter:此方法的作用是,一但服务器接收到某个客户端发送的信息,则信息由该方法处理,并由该方法负责判断此条信息应该传给socketList中的哪一些socket(用于公聊/私聊/直接反馈信息给发送者)


客户端:

在客户端所要做的事情相对简单一些,主要是三点:

1.建立连接到服务器端的socket。

2.主线程用于等待用户输入信息,一旦用户输入信息,该信息传送给服务器端。

3.建立一个后台线程,用于不停等待服务器端发送过来的信息,一旦服务端发送信息,则将信息反馈给客户端。



另外,Server和Client两端传送的信息,最好是制定一个简单的协议,用于控制信息的分类,例如聊天命令等等。


鉴于是聊天系统,可以直接发送string流,不用考虑byte[] buffer问题。


核心问题就是这些,.net还没研究,我是用java实现的,研究了一两天呢!呵呵!


有什么问题,继续交流,呵呵。
rqxiang 2003-04-09
  • 打赏
  • 举报
回复
up

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧