用 C# 写 TCP socket 连接

来源:互联网 发布:zookeeper java开发 编辑:程序博客网 时间:2024/06/06 02:25

第一次用 C# 写 TCP 连接,求指点
和同学合作完成的期中project
最终是完成了一个聊天室


首先利用封装好的 Windows.Networking.Sockets.StreamSocket 生产我的 clientsocket
这里写图片描述


通过后端给定的IP地址以及监听端口实现TCP连接
这里写图片描述


注意的是socket端要实现单例模式,因为用户的所有状态都是记录在 clientsocket 类里面,如果每次页面跳转都重新生成一次 clientsocket 很容易产生混乱。
这里写图片描述


完成第一步之后,实现了前端和后端的连接之后就要实现监听了
对于前端事件,我是通过委托和事件来实现,通过后盾接受的消息触发事件,然后把参数传递,具体的实现再在前端写,达到修改前端的目的,实现和后端的交流
主要的事件包括
这里写图片描述
1 用户登录和注册状态
2 用户聊天接受、发送 - 文字、图片
3 用户修改图像
4 用户进入、退出房间
5 用户所在房间进来、退出了某个用户

规定socket端和后端通过json格式进行通信
主要就是 json 里面分为系统消息(登录、获取房间用户列表等),聊天信息,以及图片传输。
因为所有协议都是自己定的,所以比较复杂,也是因人而异的,就不仔细说了
如果没有图片传输,那么socket本来是很简单的,网上随便搜的直接通过这种StreamWriter的WriteLineAsync当成字符串输出后台就可以收到了。
这里写图片描述


但是当我们决定加入了图片处理时就复杂多了,图片的传输不能直接当成字符串处理,于是我们定义先发送一段json信息,表示接下来要传输图片,以及图片转成二进制的大小,然后紧接着就把图片转成二进制发送过去,同理接受图片。
这里写图片描述
其中的 Imgbytes 就是我接受回来的图像的二进制格式
后面的发生事件就是规定的协议,可以忽略,并且通过isFile 判断是否在读文件,当时考虑的不止传输图片,但是由于时间关系没有实现。


前端和socket交互就说这么多,后端的有空再码上来~