C#实现局域网之间的通讯

本文介绍了如何使用C#在局域网中实现TCP通讯,通过创建服务器项目和客户端项目,利用Socket进行通信。服务器端通过线程管理和委托处理跨线程操作,确保每个用户连接的独立性。客户端则负责建立与服务器的连接,实现通讯功能,包括群聊和私聊等。
摘要由CSDN通过智能技术生成

局域网之间通讯有很多种方法,比如可以用数据库存储的方式实现,还可以用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 = 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值