局域网之间通讯有很多种方法,比如可以用数据库存储的方式实现,还可以用udp来实现,这里是用tcp来实现的,用tcp来通讯的话可以说是有点麻烦的,因为要保持各个用户与服务器之间的连接,连接一断便不能通讯了,所以个人觉得这个地方比较麻烦;

要实现Socket通讯的话首先可以把它分成两个项目来区别,一个是服务器项目(Server),一个是客户端项目(Client)。

服务器项目的实现可以大致的分成 部分,1:创建一个总连接点,这个连接点负责与客户端的连接,我们不能把连接和通讯都引用到一个连接上,这样服务器会崩溃的,而每个用户都是独立的,所以我们要利用线程来创建一个新的通讯实例,这个连接和通讯各个用户之间都是互不干扰的了,还有一个要注意的就是跨线程调用控件的话是不行的,所以我们又要利用委托存放要调用的功能在用this.Invoke()的方法来跨线程引用控件,接下来就是具体实现响应通讯了;

客户端相对来说要更容易些,创建一个客户端连接实例,与远程服务器连接起来,然后就是大致的通讯实现功能了。

下面是我个人的实现代码和实现的心得,附加了大致的注释,实现了群聊,私聊等功能。

通讯类(Communication)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6
 7 namespace Server
 8 {
 9     [Serializable]
10     public class Communication//通讯
11     {
12             public string Name { get; set; }
13             public string Ip { get; set; }//Ip地址
14         public string Port { get; set; }//端口号
15         public string Message { get; set; }//发送的消息
16         public int Types { get; set; }
17             //1代表聊天信息 2代表客户端人物信息
18         public bool IsFistLogin { get; set; }
19             public string ToEndPoint { get; set; }
20     }
21 }

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Net.Sockets;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7
 8 namespace Server
 9 {
10     [Serializable]
11     public class ServerReturnInfo
12     {
13             public Communication comm { get; set; }//通讯类
14         public Socket client { get; set; }
15     }
16 }

服务器类(Server)

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.IO;
  7 using System.Linq;
  8 using System.Net;
  9 using System.Net.Sockets;
 10 using System.Runtime.Serialization.Formatters.Binary;
 11 using System.Text;
 12 using System.Threading;
 13 using System.Threading.Tasks;
 14 using System.Windows.Forms;
 15
 16 namespace Server
 17 {
 18     public partial class forServer : Form
 19     {
 20         public forServer()
 21         {
 22             InitializeComponent();
 23         }
 24
 25         private delegate void ListDelegate(Communication comm);
 26         private ListDelegate listInfo = null;//添加成员
 27         private delegate void MessageDelegate(Communication comm);
 28         private MessageDelegate MessageInfo = null;//添加消息
 29         private delegate void SendDelegate(ServerReturnInfo sri);
 30         private SendDelegate SendInfo = null;
 31         private delegate void EndDelegate(Communication commun);
 32         private EndDelegate EndInfo = null;
 33         private List<Socket> socketList = new List<Socket>();//成员集合
 34         private Socket server = null;
 35         private void 开启服务ToolStripMenuItem_Click(object sender, EventArgs e)
 36         {
 37             int port = 0;
 38             server = new

C#实现局域网之间的通讯相关推荐

  1. 局域网之间的通讯实现

    局域网之间通讯有很多种方法,比如可以用数据库存储的方式实现,还可以用udp来实现,这里是用tcp来实现的,用tcp来通讯的话可以说是有点麻烦的,因为要保持各个用户与服务器之间的连接,连接一断便不能通讯 ...

  2. django两个服务器之间的通讯

    django两个服务器之间的通讯 ajax通讯 服务器127.0.0.1:8000的代码如下: /project/project/urls: from django.contrib import ad ...

  3. 非常详细的测试unity与android之间的通讯操作

    非常详细的测试unity与android之间的通讯操作 博客分类: unity3dandroid 非常详细的测试unity与android之间的通讯操作 转载自 http://www.narkii.c ...

  4. C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示)

    C#.NET通过Socket实现平行主机之间网络通讯(含图片传输的Demo演示) 作者:一点一滴的Beer http://beer.cnblogs.com/ 在程序设计中,涉及数据存储和数据交换的时候 ...

  5. java多线程有几种实现方法_Java多线程之间实现通讯

    一.课程目标 多线程之间如何通讯 wait.notify.notifyAll()方法 lock 停止线程 守护线程 Join方法 优先级 Yield 二.多线程之间如何实现通讯 2.1 什么是多线程之 ...

  6. WWF系列之----关于Host与WorkflowInstance之间的通讯

    关于Host与WorkflowInstance之间的通讯 工作流是将程序(实际上就是业务)流程独立出来,建立健壮的可伸缩的交互式的流程管理.其基本任务是保证每一个步骤必须严格地执行且仅可以执行一遍. ...

  7. Android Bundle类,通过bundle实现在两个activity之间的通讯

    根据google官方的文档(http://developer.android.com/reference/android/os/Bundle.html) Bundle类是一个key-value对,&q ...

  8. C# 进程之间的通讯

    该方法针对同一台服务器上的2个进程之间的通讯,进程A是一个实时采集程序,可能由于某个异常或运行时间过长导致程序卡死,现需要启动另外一个进程B来对 进程A进行定时监控,如果发现A卡死或无故退出,则自动启 ...

  9. RTX5 | 内存池04 - 共享内存用于线程之间的通讯(阻塞方式)- 使用信号量

    文章目录 一.前言 二.实验目的 三.代码 3.1.main.h 3.2.main.c 四.Debug 4.1.System Analyzer 4.2.Debug (printf) Viewer 一. ...

最新文章

  1. app图标圆角角度_怎样使用sketch绘制标准APP图标圆角矩形背景?
  2. NODE Stream流总结(1)
  3. python Elasticsearch 排序
  4. 【floyd存字典序路径】【HDU1385】【Minimum Transport Cost】
  5. Pytorch中RNN入门思想及实现
  6. 计算机网络体系结构物流层,计算机网络体系结构58029.ppt
  7. mysql创建远程登陆用户并授权
  8. GIT常用快捷键配置
  9. 【转】QDockWidget 停靠窗口和工具栏
  10. 2021第一场教师招聘考试3.28开始!一个月备考来得及吗?
  11. [USACO4.1]麦香牛块Beef McNuggets By cellur925
  12. 判别式模型 vs. 生成式模型
  13. 01-编写CMS注意事项
  14. 台湾“比基尼登山客”遗体运出 山友接其“回家”
  15. 基于Netty手写RPC框架
  16. 基于Java的企业新闻管理系统的设计与实现
  17. ROS机器人程序设计课程反思-2022终篇-
  18. ansible-playbook 通过mail模块发送邮件
  19. 矩阵求和及Kadane算法
  20. 如何在同一台电脑上保持两个文件夹的内容同步更新?

热门文章

  1. springboot整合Redis分布式锁最佳实践
  2. 2021年3月全国计算机等级考试 贵州考点~
  3. NetApp 帮助汽车制造商构建 Data Fabric,以加快创新速度
  4. Roam Research 的 iOS 客户端正式发布了,好用吗?
  5. 【QNX Hypervisor 2.2 用户手册】2.6 处理qvm终止
  6. TOEFL 听力 geology
  7. 在xml中定义excel的sheet_excel中的“工作簿(扩展名xls)”和“表格(扩展名xml)”有什么区别?:excel表格里的数据加扩展名...
  8. 计算机二级和nit 哪个难,国家二级计算机考试和NIT有什么不同,那种比较好?...
  9. Go:关于goroutine及ants的思考
  10. 博达建站中我们上传的网页的代码、img、css在哪里