用Tcp实现点点对的聊天

简介: 查阅资料并自己动手实践了下Socket 编程,今天想实现下点对点的聊天。发现其原理几乎差不多。分2端操作,这里也分服务器端和客户端 服务器端: 1)新建TcpListener 对象,并初始化       private TcpListener tcpListener;        priv...
查阅资料并自己动手实践了下Socket 编程,今天想实现下点对点的聊天。发现其原理几乎差不多。分2端操作,这里也分服务器端和客户端

服务器端:

1)新建TcpListener 对象,并初始化

      private TcpListener tcpListener;
        private TcpClient client;
        private NetworkStream netStream;
        private StreamReader streamR;
        private StreamWriter streamW;
        private Thread MainThread;
        private Thread thread;
        private void Start()
        {
            tcpListener = new TcpListener(IPAddress.Parse(this.txtIp.Text), 8080); //输入ip 和端口
            tcpListener.Start();   //开始监听
            client = tcpListener.AcceptTcpClient();  //知道客户端有连接
            tcpListener.Stop();  //关闭监听。
            netStream = client.GetStream(); //获取从客户端发送过来的数据流
            streamR = new StreamReader(netStream, Encoding.Default);
            streamW = new StreamWriter(netStream, Encoding.Default);
            thread = new Thread(new ThreadStart(Reading));
            thread.Start();
        }

2)读取客户端发送过来的消息

        private void Reading() //读取内容
        { 

            for (int i = 0; i < 4; i++)//经测试发现,mySread.ReadLine()在每一次聊天内容发送之后要读四次,                                        //这是查阅资料找到的具体原因我也不清楚,希望知道的人可以告诉我一下
            {             //第一次便是头部标志信息行,第二次读取的是聊天内容,
                if (i == 0)      //最后两次读取的内容为空,依此设计此显示和染色函数
                {
                    string youmsg = "\r\n" + sr.ReadLine();
                    rtxtLog.AppendText(youmsg);
                }
                else
                {
                    string youmsg = "\r\n" + sr.ReadLine();
                    rtxtLog.AppendText(youmsg);
                }
            }

        }

3)向客户端发送消息 button_事件

        private void btnSend_Click(object sender, EventArgs e)
        {
            streamW.WriteLine(new DateTime().ToShortDateString()+"来自服务器的消息");
            streamW.WriteLine(this.txtContent.Text);
            streamW.Flush();
        }

客户端:

1) 建立连接

            client = new TcpClient();
            client.Connect(IPAddress.Parse("127.0.0.1"), 8080);
            netStream = client.GetStream(); //获取从服务器端的数据流
            sr = new StreamReader(netStream, Encoding.Default);
            sw = new StreamWriter(netStream, Encoding.Default);
            myThread = new Thread(new ThreadStart(Reading));
            myThread.Start();
            MessageBox.Show("连接成功");

 2)读取数据的方法

 

private void Reading()
        {

            for (int i = 0; i < 4; i++)//经测试发现,mySread.ReadLine()在每一次聊天内容发送之后要读四次,                       
            {             //第一次便是头部标志信息行,第二次读取的是聊天内容,
                if (i == 0)      //最后两次读取的内容为空,依此设计此显示和染色函数
                {
                    string youmsg = "\r\n" + sr.ReadLine();
                    rtxtLog.AppendText(youmsg);
                }
                else
                {
                    string youmsg = "\r\n" + sr.ReadLine();
                    rtxtLog.AppendText(youmsg);
                    rtxtLog.Select(rtxtLog.TextLength - youmsg.Length + 1, youmsg.Length);
                    rtxtLog.SelectionColor = Color.Red;
                }
            }

        }

3)发送数据

          private void btnSend_Click(object sender, EventArgs e)
        {
            sw.WriteLine("时间:"+new DateTime().ToShortDateString()+"来自客户端的消息");
            sw.WriteLine(this.txtInfo.Text);
            sw.Flush();
           //client.sen
        }

 

测试的时候先启用服务器端程序,ip输入127.0.0.1 然后开启客户端程序。即可测试。 /Files/hantianwei/TcpAppTest.rar

目录
相关文章
|
网络协议 Java
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
ip地址的分类: 1、ipv4、ipv6 127.0.0.1:4个字节组成,0-255,42亿;30亿都在北美,亚洲就只有4亿 2011年就用尽了。
Java网络编程:UDP/TCP实现实时聊天、上传图片、下载资源等
|
网络协议
TCP实现聊天功能
TCP实现聊天功能
115 0
TCP实现聊天功能
|
存储 网络协议 Java
JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例,我们暂时不讲了,我们直接来重点吧,关于JAVA的网络请求是怎么实现的...
1103 0
|
7月前
|
机器学习/深度学习 人工智能 网络协议
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
TCP/IP五层(或四层)模型,IP和TCP到底在哪层?
135 4
|
监控 网络协议 网络架构
IP协议【图解TCP/IP(笔记九)】
IP协议【图解TCP/IP(笔记九)】
158 0
|
域名解析 网络协议
IP协议, TCP协议 和DNS 服务分别是干什么的?
大家好,我是阿萨。昨天讲解了网络四层协议[TCP/IP协议族分为哪4层?]今天我们学习下IP 协议, TCP 协议和DNS 协议分别是干什么的。
308 0
IP协议, TCP协议 和DNS 服务分别是干什么的?
|
网络协议
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
ACK的累加规则-wireshark抓包分析-不包含tcp头部、ip头部、数据链路层头部等。
|
网络协议 网络架构
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型
六、TCP/IP模型 和 5层参考模型