一个关于socket异步连接请求的问题.

juny0302 2012-07-14 09:52:02
服务器端调用socket.BeginAccept来接受客户端连接请求.我希望客户端在发送请求的时候同时将自身的标示信息发过来.
查看vs的帮助有以下函数可以在接收异步请求的时候同时获取到"初始数据",以下是帮助上的说明:
---------------------------
public Socket EndAccept(
out byte[] buffer,
out int bytesTransferred,
IAsyncResult asyncResult
)
异步接受传入的连接尝试,并创建新的 Socket 对象来处理远程主机通信。 此方法返回一个缓冲区,其中包含初始数据和传输的字节数
-------------------------
客户端使用如下方法发出连接请求:
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse(serverIp), port);
AsyncCallback ar = new AsyncCallback(ConnectCallback);

sock.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), sock);

我现在的问题是不知道客户端在发送连接请求时该怎么初始化发送的数据.
...全文
68 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
这个所谓的“用户标识信息”,可以有很多功能,例如同时记录了客户端使用什么硬件、操作系统、语言,等等。但是无论如何,它是在多个通讯信令中完成的,也就是业务逻辑层设计中完成的。你不要跟底层的二进制的(字节流的)通讯技术混为一谈。
  • 打赏
  • 举报
回复
不清楚你问的到底是什么问题。

通许只是保证通讯,并不保证业务逻辑。通过设计信令协议,你把收到的数据(二进制字节数组)转换为可以理解的命令,调用服务器端相应的命令程序(对象或者/及其方法),然后将输出的结果也变成消息(二进制字节数组),然后发送给客户端。这就是一次命令处理。

而一个业务逻辑,是在上述层次之上的另外一层概念,是通过命令的内涵来实现的。一个系统往往有几十个、几百个命令。其中一个可能是Register命令,处理客户端提交的用户注册命令,返回给客户端一个bool表明是否成功。另外一个命令可能是Login命令,处理客户端登录命令,并且返回给客户端一个ulong的整数代表用户会话授权编号,这样随后的命令只要提交这个编号、服务器端就知道是哪一个登录用户在说话了——即使客户端重联服务器也能区分这个用户会话。
言多必失 2012-07-15
  • 打赏
  • 举报
回复
有个简易聊天系统,你看看就明白的了。

110,536

社区成员

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

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

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