一个简易的SocketIM

简介:

今天做了一个简易的socketIM的小示例。基本思想是开启两个winform,每个winform既充当服务器也充当客户端。一个监听8000端口,另外一个监听8001端口,两个winform接收到信息之后将信息显示在form的控件上。

 

这篇记录一下码code中学到的一些东西。

clip_image001

1 System.Net.Sockets的使用

.net的socket库已经将C中对socket的所有使用封装起来了。庆幸的是基本的函数和流程还是一样的。

 

想要创建socket server,步骤如下:

 

实例化一个socket

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

绑定端口

socket.Bind(endpoint);

监听端口

socket.Listen(5);

Accept请求

Socket clientSocket = socket.Accept();

接收请求内容

clientSocket.Receive(byteMessage);

关闭socket

socket.Close();

 

创建client端,步骤如下:

实例化一个socket:

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

连接到接收端

socket.Connect(endpoint);

发送请求

socket.Send(byteMessage);

关闭socket

socket.Close();

 

2 多线程操作

C#中的多线程操作函数是封装在System.Threading中。我这里是使用最简单的多线程处理函数:

 

建立一个线程处理函数,这个函数是回调用的

private void BeginListen()

实例化一个Thread,并注册回调函数

Thread thread = new Thread(new ThreadStart(BeginListen));

将线程设置为后台运行

thread.IsBackground = true;

启动线程

thread.Start();

 

3 子线程处理父线程创建的winform控件

.net中winform控件只能由创建控件的线程来操作,子线程如果要操作就需要通过代理的方式来迂回。

msdn中http://msdn.microsoft.com/zh-cn/library/system.windows.forms.control.invokerequired%28v=VS.80%29.aspx是这样描述的

clip_image002

 

首先是Control.InvokeRequired 属性

如果当前线程对该控件没有控制权限,则这个线程调用控件的InvokeRequired返回true,说明这个线程只有调用Invoke方法才能修改控件的属性

如果当前线程对该控件有控制权限,则这个属性返回false

 

其次是Control.Invoke方法

这个方法有两个参数,第一个是方法,第二个参数是方法的参数

 

这个msdn上有个非常详细的使用例子:

http://msdn.microsoft.com/zh-cn/library/a1hetckb%28v=vs.80%29.aspx

使用这两个就可以使用这么个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
delegate  void  SetListBox( string  strValue);                    //定义委托
        private  void  SetListBoxValue( string  value)
         {
             if  ( this .listBox1.InvokeRequired)
             {
                 SetListBox sbox =  new  SetListBox(SetListBoxValue);
                 listBox1.Invoke(sbox, value);
             }
             else
             {
                 listBox1.Items.Add(value);
             }
         }

处理完这三个知识点,基本就完成了。

 

源码上传在这里:https://github.com/jianfengye/MyWorks/tree/master/SocketIM






本文转自轩脉刃博客园博客,原文链接:http://www.cnblogs.com/yjf512/archive/2012/06/17/2552816.html,如需转载请自行联系原作者

相关文章
|
7月前
|
存储 缓存 NoSQL
HyperLogLog——用户日活(dau)、月活(mau)统计
HyperLogLog——用户日活(dau)、月活(mau)统计
159 1
|
7月前
|
网络协议
TCP三次握手,四次挥手策略
TCP三次握手,四次挥手策略
32 0
|
存储 SQL 缓存
|
NoSQL Unix
一文尝试解决水稻参考基因组下载
昨天发了如何一步下载水稻泛基因组的contig序列,就有小伙伴在后台问我如何下载水稻最新版日本晴参考基因组序列。由于我主要是研究拟南芥(Arabidopsis thaliana), 默认都是去TAIR上下载TAIR10的参考序列和注释信息,对水稻其实没有多大了解。
2190 0
|
运维 监控 混合部署
甜橙金融私有云混合部署综合探索实践
如何能快速、合理地将现有资源分配给生产的各个服务,并能同时保证分布式、高并发、高可用、高性能等成为整个运维技术团队一直在尝试和探索的方向,本次主要会针对目前私有云当中容器与虚拟机混部这块的探索和实践做一个分享。
1757 0
|
2天前
|
调度 云计算 芯片
云超算技术跃进,阿里云牵头制定我国首个云超算国家标准
近日,由阿里云联合中国电子技术标准化研究院主导制定的首个云超算国家标准已完成报批,不久后将正式批准发布。标准规定了云超算服务涉及的云计算基础资源、资源管理、运行和调度等方面的技术要求,为云超算服务产品的设计、实现、应用和选型提供指导,为云超算在HPC应用和用户的大范围采用奠定了基础。
|
9天前
|
存储 运维 安全
云上金融量化策略回测方案与最佳实践
2024年11月29日,阿里云在上海举办金融量化策略回测Workshop,汇聚多位行业专家,围绕量化投资的最佳实践、数据隐私安全、量化策略回测方案等议题进行深入探讨。活动特别设计了动手实践环节,帮助参会者亲身体验阿里云产品功能,涵盖EHPC量化回测和Argo Workflows量化回测两大主题,旨在提升量化投研效率与安全性。
云上金融量化策略回测方案与最佳实践
|
11天前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
8898 20