黑马程序员-006聊天室程序

聊天室程序

设置服务端监听过程:

//设置全局套接接口

            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

 

//获得端口地址

            IPAddressipAddress = IPAddress.Parse(txbIp.Text);

//获得接口地址

            IPEndPointipEndPoint = new IPEndPoint(ipAddress,int.Parse(txbSocket.Text));

            socketWatch.Bind(ipEndPoint);

//设置监听队列

            socketWatch.Listen(10);//设置监听队列的长度

//开始监听

 

//全局变量,单独开启一个线程负责接收信息

            watchThread = new Thread(socketConnection);

            watchThread.IsBackground=true;

            watchThread.Start();

 

//定义一个方法,循环接收客户信息

        privatevoid  socketConnection()

        {

            while(true)

            {

//全局变量,用于接收监听队列得到的用户信息,并与用户创建连接

                socketConnect = socketWatch.Accept();

            }

        }

 

 

设置客户连接:

            socketConnection = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            IPEndPointipEndPoint = new IPEndPoint(IPAddress.Parse(txbIp.Text), int.Parse(txbSocket.Text));

//连接端口

           socketConnection.Connect(ipEndPoint);

            threadReceive = new Thread(receiveMsg);

            threadReceive.Start();

 

发送消息语句:

//通过套接字发送消息必须将格式转换为byte[]

            byte[]sendMsg = System.Text.Encoding.UTF8.GetBytes((txbSend.Text.Trim()));

            socketConnect.Send(sendMsg);

            showMessage("send:"+txbSend.Text);

 

 

接收消息语句:

//因为消息的不定时性,所以要用循环语句时刻监听

            while(true)

            {

//创建好容器,存放接收到的数据

                byte[]receiveMsg = new byte[1024* 1024 * 2];

//得到接收数据的长度

                intlength=socketConnection.Receive(receiveMsg);

                stringreceiveMesg = System.Text.Encoding.UTF8.GetString(receiveMsg,0,length);

                showMsg(receiveMesg);

            }

 

要点:

1.聊天室的整体程序涉及到套接字端口的信息,所以在多人聊天时为了保存客户的信息,对多人发送消息,可以建立一个dictionary泛型。

2.而为了保持每个聊天的独立性,则需要创建多个线程和套接字,在此过程中会用上一些循环以及判断语句,使用的时候需要多加梳理。

3.发送非文本格式的文件时,需要对数据进行一些处理,在数据转换为byte[]后可以将让数据加上前缀,以方便接受信息者判断文件格式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值