C#编写聊天程序系列笔记(一)原理

原创 2013年12月03日 23:37:07

程序采用TCP协议,当然神马是TCP协议呢,大家可以自行百度之。长话短说,为了C#方便使用TCP协议,在

using System.Net.Sockets;里面使用TcpListener类简化了TCP的服务器端操作,注意是服务器端,毕竟在服务器端我们才需要监听。
我们只需要定义一个实体变量,这样就可以进行服务器操作了。
当然TcpListener有两个参数格式如下
public TcpListener(IPAddress localaddr,int port)  第一个参数表示本地的IP地址,第二个参数表示监听的端口号
当我们设置好了之后,采用start()开始侦听连接请求,如果收到连接请求,则start()对请求进行排队,继续监听是否还有下一个请求,直到调用到stop方法为止。
当然stop方法就是关闭TcpListener并停止监听。
程序中采用publi Socket AcceptSocket(),这个是一个阻塞的方法,当有客户连接的时候返回一个socket实例,这样就可以调用Send与Receive方法来发送消息
为了更加方便的传输数据,程序采用NetworkStream类来访问网络数据流。
当然前提就是创建一个NetworkStream的新实例,采用这个方法public NetworkStream(Socket socket)里面参数socket就是用来发送数据的socket刚好结合上面的AcceptSocket就可以创建数据流了。
此时接收数据采用 StreamRead,发送数据采用StreamWrite,这样就可以发送数据了。
好了,下面是程序中的部分代码,帮助更好的理解
这是直接从程序复制的,有些参数可能用不上
  • 定义参数
private TcpListener tcpListener;
        private NetworkStream[] netWorkStream;
        private StreamReader[] streamReader;
        private StreamWriter[] streamWriter;
        private Socket[] socketForClient;
        private int CurPort;
        private IPAddress CurIp;
  • 开始监听
  •  private void btnStratServer_Click(object sender, EventArgs e)
            {
                serverThread = new Thread(new ThreadStart(Listen));
                serverThread.Start();
     //           Listen();
            }
    
    
    
    
  • 必要参数赋值
  • CurIp = IPAddress.Parse(txtIP.Text);
                    CurPort = Convert.ToInt32(txtPort.Text);
                    tcpListener = new TcpListener(CurIp, CurPort);
                    //开始监听
                    tcpListener.Start();
                    listInfo.Items.Add("服务器开始启动");

    
    
    
    
  • 监听
  •  socketForClient[i] = tcpListener.AcceptSocket();

    
    
    
    
  • 创建数据流
  • netWorkStream[i] = new NetworkStream(socketForClient[i]);
                            streamReader[i] = new StreamReader(netWorkStream[i]);
                            streamWriter[i] = new StreamWriter(netWorkStream[i]);
                            recvThread = new Thread(new ParameterizedThreadStart(RecvAndSendData));
                            recvThread.Start(i);

    
    
    
    
  • 发送数据与接收数据示例
  • streamWriter[i].WriteLine("hahahahahah");
                            streamWriter[i].Flush();

    
    
    
    
  • string Pass = streamReader[i].ReadLine();
  • 好了到现在基本上流程就实现了,还有问题的话私心我,可以发给源代码研究\(^o^)/~
    
版权声明:本文为博主原创文章,未经博主允许不得转载。

c#基于socket编程实现简单多人聊天程序

首先直接上代码链接,欢迎修改与指正:https://github.com/yinyoupoet/chatRoomTest 代码、可运行程序、详细设计文档、使用说明等都在里面啦然后再上图你们感受下: ...
  • qq_32623363
  • qq_32623363
  • 2017年06月06日 21:44
  • 4663

JAVA写一网络聊天程序

JAVA写一网络聊天程序
  • javaniuniu
  • javaniuniu
  • 2017年02月10日 12:54
  • 1456

C#编写聊天程序系列笔记(三)数据库加锁操作

C#操作数据库进行加锁操作
  • jianxia_wzx
  • jianxia_wzx
  • 2013年12月04日 00:00
  • 2217

C# socket 局域网聊天程序的一点心得

C# socket 局域网聊天程序的一点心得 (一)服务器与客户端的关系 1、服务器开启监听服务        服务器使用特定的端口不停的监听来自客户端的消息。(开启一个新线程进行监听)。 2、监听...
  • AwakeningWolf
  • AwakeningWolf
  • 2015年08月01日 10:11
  • 1857

c#实现类似QQ的简单聊天程序,可支持广域网。

该c#程序是用TCP实现的可局域网聊天程序,也可以广域网聊天程序。
  • qywl2014
  • qywl2014
  • 2017年09月04日 13:06
  • 596

QT 聊天程序

一.聊天程序 QT实现的界面 网络的数据通信 服务器端 建立用户UI 建立服务器socket 接受客户连接 为每个各户建立线程处理客户数据 分析设计的一般规律: 1.用例 2....
  • u012409883
  • u012409883
  • 2015年06月29日 22:31
  • 1179

springMVC笔记系列(18)——配置文件细节详解

本文着重说说springMVC项目中各个配置文件的一些细节。web.xml文件是web应用的部署描述。在上一节的springMVC示例中 ,idea下的Maven-webapp项目自动生成了web.x...
  • xinghuo0007
  • xinghuo0007
  • 2016年12月03日 17:30
  • 401

用窗口程序做Java socket编写聊天程序

服务端: import java.io.*; import java.net.*; import java.util.*; public class ChatServer { boolean st...
  • superit401
  • superit401
  • 2016年08月13日 19:59
  • 3087

windows下socket开发tcp程序 简单例子

Windows下的简单tcp例子。代码均在VC6.0下调试过。服务器代码://TCP server//listen port 9102//receive string and display it//...
  • HDying
  • HDying
  • 2016年01月01日 21:59
  • 218

C#写聊天程序系列笔记(二)访问Mysql数据库

C#对Mysql数据库的操作示例
  • jianxia_wzx
  • jianxia_wzx
  • 2013年12月03日 23:51
  • 1066
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#编写聊天程序系列笔记(一)原理
举报原因:
原因补充:

(最多只允许输入30个字)