A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 天高地阔 中级黑马   /  2012-4-12 13:22  /  1834 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

private void btnSend_Click(object sender, EventArgs e)
        {
            string strMsg = txtMsgSend.Text.Trim();
            //将要发送的字符串转成utf8对应的字节数组
            byte[] arrMsg=System.Text.Encoding.UTF8.GetBytes(strMsg);
            sokCoonction.Send(arrMsg);
            ShowMsg("发送了数据出去:" + strMsg);
        }
首先请教 这段代码的意思, 主要是send方法和上面转字符串的代码,

还有socket下的 Accept,Receive等方法的应用,

主要是Accept的应用,
如下面这个: 请说明Accept 具体的作用,
        while (true)//持续不断的监听新客户端的连接请求
            {
                //创建负责通信的套接字 开始监听 客户端的连接请求, 注意:Accpet会阻断当前的线程;
                sokCoonction = socketWatch.Accept();
                ShowMsg("客户端连接成功!");
            }

最好可以举例说明,

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

3 个回复

倒序浏览
send()就是发送数据的方法。发送的数据是以字节方式发送(byte)
代码中sokCoonction 这个Socket在定义的时候就已经设置了远程对方的ip地址和端口
所以只需要传入要发送的信息就可以了。


Accept方法: 监听 客户端的连接请求。如果没有任何客户端发送请求连接该服务器。那么程序将停留在Accept() 这里不再运行下面的代码。当监听到有人发送来请求的时候它才继续往后运行。所以程序会卡在这里不动了。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
System.Text.Encoding.UTF8 : 获取 UTF-8 格式的编码。
GetBytes :将指定的 String 中的所有字符编码为一个字节序列。
Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket。
不能使用返回的这个 Socket 接受连接队列中的任何附加连接。然而,可以调用返回的 Socket 的 RemoteEndPoint
方法来标识远程主机的网络地址和端口号。

在阻止模式中,Accept 将一直处于阻止状态,直到传入的连接尝试排入队列。连接被接受后,
原来的 Socket 继续将传入的连接请求排入队列,直到您关闭它。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
Socket 类为网络通信提供了一套丰富的方法和属性。Socket 类允许您使用 ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输。Socket 类遵循异步方法的 .NET Framework 命名模式;例如,同步 Receive 方法对应于异步 BeginReceive 和 EndReceive 方法。
如果应用程序在执行期间只需要一个线程,请使用下面的方法,这些方法适用于同步操作模式。
如果当前使用的是面向连接的协议(如 TCP),则服务器可以使用 Listen 方法侦听连接。Accept 方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的 Socket。可以使用此返回的 Socket 来调用 Send 或 Receive 方法。如果要指定本地 IP 地址和端口号,请在调用 Listen 方法之前先调用 Bind 方法。如果不调用 Bind,基础服务提供程序将为您分配这些值。此后,可以使用 LocalEndPoint 属性来标识分配给 Socket 的 IP 地址和端口号。如果想连接到侦听主机,请调用 Connect 方法。若要进行数据通信,请调用 Send 或 Receive 方法。
如果当前使用的是无连接协议(如 UDP),则根本不需要侦听连接。调用 ReceiveFrom 方法可接受任何传入的数据报。使用 SendTo 方法可将数据报发送到远程主机。
若要在执行过程中使用单独的线程处理通信,请使用下面的方法,这些方法适用于异步操作模式。
如果当前使用的是面向连接的协议(如 TCP),则可使用 Socket、BeginConnect 和 EndConnect 方法来连接侦听主机。通过使用 BeginSend 和 EndSend 方法,或者使用 BeginReceive 和 EndReceive 方法,可以进行异步数据通信。可以使用 BeginAccept 和 EndAccept 处理传入的连接请求。
如果当前使用的是无连接协议(如 UDP),则可以使用 BeginSendTo 和 EndSendTo 来发送数据报,而使用 BeginReceiveFrom 和 EndReceiveFrom 来接收数据报。
当数据发送和数据接收完成之后,可使用 Shutdown 方法来禁用 Socket。在调用 Shutdown 之后,可调用 Close 方法来释放与 Socket 关联的所有资源。
Socket 类允许使用 SetSocketOption 方法来配置 Socket。可使用 GetSocketOption 方法来检索这些设置。
注意   如果编写较简单的应用程序,而且只需同步数据传输,则可以考虑使用 TcpClient、TcpListener 和 UdpClient。这些类为 Socket 通信提供了更简单、对用户更友好的接口。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马