黑马学习日记four--套接字socket

本文介绍了套接字(Socket)的基础概念及其在网络通信中的作用,包括流套接字和数据报套接字的区别,并提供了服务器端和客户端的简单示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------      

   套接字是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。套接字通常和同一个域中的套接字交换数据,各种进程使用这个相同的域互相之间用Internet协议进行通信。

套接字有两种不同的类型:流套接字和数据报套接字。

要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,称之为ClientSocket,另一个运行于服务器端,称之为ServerSocket。

套接字类socket 命名空间using System.Net.Sockets;在套接字连接中ip地址类命名空间 using System.Net;应用到IPAddress,IPEndPoint类

下面是简单的通讯实例

服务器端:

    Thread threadWatch = null;
        Socket socketWatch = null;

        private void btnBeginlisten_Click(object sender, EventArgs e)
        {
            //创建服务器监听套接字
            socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());//获取ip地址
            IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtport.Text.Trim()));//获取网络节点
            socketWatch.Bind(endpoint);
            socketWatch.Listen(10);
            threadWatch = new Thread(WatchConnecting);
            threadWatch.IsBackground = true;
            threadWatch.Start();
            ShowMsg("服务器启动监听成功!");

        }

        Dictionary<string, Socket> dict = new Dictionary<string, Socket>();
        //Dictionary<string, Thread> dictthread = new Dictionary<string, Thread>();
        void WatchConnecting()
        {
            while (true)
            {
                Socket socketConnection = socketWatch.Accept();//创建新的连接套接字
                lbOnline.Items.Add(socketConnection.RemoteEndPoint.ToString());
                dict.Add(socketConnection.RemoteEndPoint.ToString(), socketConnection);
                Thread recthread = new Thread(RecMsg);
                recthread.IsBackground = true;
                recthread.Start(socketConnection);
                //dictthread.Add(socketConnection.RemoteEndPoint.ToString(), recthread);

                ShowMsg("客户端连接成功!"+socketConnection.RemoteEndPoint.ToString());
            }
        }
        void ShowMsg(string msg)
        {
            txtmsg.AppendText(msg + "\r\n");
        }

        void RecMsg(object sockect)
        {
            Socket consockect = (Socket)sockect;
            while (true)
            {
                byte[] ArryRecMsg = new byte[1024 * 1024 * 2];
                int msglength = consockect.Receive(ArryRecMsg);
                string strRecMsg = System.Text.Encoding.UTF8.GetString(ArryRecMsg, 0, msglength);
                ShowMsg("接收数据"+consockect.RemoteEndPoint+":"+strRecMsg);
                
            }
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string strmsg=txtSendMsg.Text.Trim();
            byte[] arrmsg=System.Text.Encoding.UTF8.GetBytes(strmsg);
            string selcetendpoint=lbOnline.SelectedItem.ToString();
            dict[selcetendpoint].Send(arrmsg);
            //socketConnection.Send(arrmsg);
            ShowMsg("发送数据:" + strmsg);
        }


客户端

  Socket socketClient = null;
        Thread threadRec = null;
        private void btnConnect_Click(object sender, EventArgs e)
        {
            
            IPAddress address = IPAddress.Parse(txtIP.Text.Trim());//获取ip地址
            IPEndPoint endpoint = new IPEndPoint(address, int.Parse(txtport.Text.Trim()));//获取网络节点
            socketClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socketClient.Connect(endpoint);
            threadRec = new Thread(ClientRecMsg);
            threadRec.IsBackground = true;
            threadRec.Start();

        }

        void ClientRecMsg()
        {
            while (true)
            {
                byte[] ArryRecMsg = new byte[1024 * 1024 * 2];
                int msglength = socketClient.Receive(ArryRecMsg);
                string strRecMsg = System.Text.Encoding.UTF8.GetString(ArryRecMsg, 0, msglength);
                ShowMsg(strRecMsg);
            }
        }
        void ShowMsg(string msg)
        {
            txtmsg.AppendText(msg + "\r\n");
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
     
        }

        private void btnSend_Click_1(object sender, EventArgs e)
        {
       string strmsg = txtSendMsg.Text.Trim();
            byte[] arrmsg = System.Text.Encoding.UTF8.GetBytes(strmsg);
            socketClient.Send(arrmsg);
            ShowMsg("发出数据:" + strmsg);
        }


上面的代码还有很多不完善的地方,异常处理没有做,还有很多地方需要改进。但是对socket的应用学习

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值