关闭

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

标签: C#源代码聊天通信socket
852人阅读 评论(0) 收藏 举报
分类:

程序采用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^)/~
    
1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    近期公告
    我的小说:封天神印
    1、本博客所有原创文章,引用时请指明出处!!!谢谢!!!
    2、博客中涉及的代码如需要请邮件联系 jianxiawzx@126.com
    3、大家看完文章请点击一下文章下面的“顶”支持一下下哈
    个人资料
    • 访问:542856次
    • 积分:8468
    • 等级:
    • 排名:第2383名
    • 原创:292篇
    • 转载:44篇
    • 译文:0篇
    • 评论:195条
    我的长篇巨著:封天神印
    博客专栏