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

Socket网络编程疑问,客户端如何在Connect()的时候带上用户Id值
如题, 最近我在做一个Socket的小聊天程序 ,用的TCP方式通信,  当客户端Connect()连接服务端的时候,如何带上自己登陆的Id值,  然后服务端Accept()接收到新的连接之后,取出Id值, 这样服务器端第一时间就知道是谁发的消息了,然后打开聊天界面,把对应的用户的值传过去。 求大神支招。 为小弟指点迷津

------解决方案--------------------
从你的问题可以看出两点:
第一,你对socket还不是很熟悉
第二,你对聊天程序的实现理解是错误的

按照你的想法来做,就算成功了,那也只是一个p2p,根本不是QQ这种聊天程序。
------解决方案--------------------
对于socket的学习,不要从聊天程序开始,从其他的数据传输程序开始吧。

先实现单向的数据传输,然后实现双向的数据传输,最后才是做好一个聊天的服务端和客户端,循序渐进。
聊天程序的ID之类的东西,不是在connect的时候传输的,而是connect成功之后,send到服务端的
------解决方案--------------------
不可以。
TCP的Connect是由TCP协议规定的(三路握手,细节见http://zh.wikipedia.org/wiki/传输控制协议)。

不过你可以在连接后,客户端马上发送一个id(甚至其他信息,比如密码)到服务器。


------解决方案--------------------
思路方向是正确,服务器专门有一个socket和端口专门负责接待,在第一次连接的时候,服务端有代码可以得到客户端的IP地址,记录客户端的IP地址,并用全局变量给这个IP地址一个唯一的ID值插入到list等什么数据集里。有了这个数据集你做群发或者聊天就方便了。

如果非要客户发送ID也简单啊,C和S握手完成后,S发个包问C你是谁,C发自己ID给S,细节就是要定义协议的标示