黑马程序员--Socket(套接字)

---------------------- <a href="http://net.itheima.com/" target="blank">Windows Phone 7手机开发</a>、<a href="http://net.itheima.com/" target="blank">.Net培训</a>、期待与您交流! ----------------------

这是总结有关Socket的一些知识,希望大家能用的到。

1、Socket的两种类型:
   a、流式Socket(stream)
    是一种面向连接的Socket,针对于面向连接的TCP服务应用,安全,但效率低
   b、数据报式Socket(datagram)
    是一种无连接的Socket,对应于无连接的UDP服务应用。不安全(丢失‘顺序混乱,在接收端要分析重排及要求重发’),但效率高
2、scoket的一般应用模式(服务端(至少需要两个socket)和客户端):
   a、服务端welcoming socket开始监听端口(负责监听客户端的连接信息)
   b、客户端client socket连接服务端指定端口(负责接收和发送服务端消息)
   c、服务端welcoming socket 监听到客户端连接,创建connection socket。(负责和客户端通信)
3、引用的命名空间是:
   Using System.Net;
   using System.Net.Socket;
4、服务端: 
   using System.Net;
   using System.Net.Sockets;
   using System.Threading;
   namespace SocketWatch
  {
      public partial class Socketwathcpoint : Form
      {
        public Socketwathcpoint()
        {
            InitializeComponent();
        }
       Thread watchthread=null;


       Socket wathcsocket=null;
        private void btsocket_Click(object sender, EventArgs e)
        {
            //创建 服务端 负责监听的套接字,参数(使用IP4协议,使用流式连接,使用TCP协议传输数据)
            wathcsocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            //获得文本框的IP地址对象
            IPAddress address = IPAddress.Parse(textBox1.Text.Trim());
            //创建 包含ip和port的网络节点对象
            IPEndPoint point = new IPEndPoint(address,int.Parse(textBox2.Text.Trim()));
            //将负责监听的套接字绑定到唯一的IP和端口上
            wathcsocket.Bind(point);
            //设置监听队列的长度
            wathcsocket.Listen(10);

            watchthread=new Thread(accept);
            watchthread.IsBackground=true;//设置为后台线程
            watchthread.Start();//开启线程

            message("服务器启动监听成功!");
        }
          void accept()
        { 
           while(true)//持续不断的监听客户端的连接请求
           { 
      //开始监听 客户端连接请求。  注意:Accept方法,会阻挡当前的线程
               Socket connection = wathcsocket.Accept();
               message("客户端连接成功!");
             }
        }
        void message(string name)
        {
            textBox3.AppendText(name+"\r\n");
        }
    }
}
5、客户端:
using System.Net;
using System.Net.Sockets;
namespace ClientSocket
{
    public partial class Form1 : Form
    {
        private void btClient_Click(object sender, EventArgs e)
        {
            //获得ip
            IPAddress address = IPAddress.Parse(textBox1.Text.Trim());
            //网路节点
            IPEndPoint point = new IPEndPoint(address,int.Parse(textBox2.Text.Trim()));
            //创建客户端套接字
            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            //向指定的IP和端口 发送连接请求
            sock.Connect(point);
        }
    }
}
6、Socket的一些方法:
   Socket():创建一个Socket
   Bind():绑定一个本地的IP和端口号(IPEndPoint)
   Listen():让Socket侦听传入的连接尝试,并指定侦听队列容量
   Connect():初始化与另一个Socket的连接
   Accept():接收连接并返回一个新的Socket(需要调用一个线程来操作)
   Send():输出数据到Socke t
   Receive(): 从Socket中读取数据(需要调用一个线程来操作)
   Close():关闭Socket(销毁连接)
   
--------------------- <a href="http://net.itheima.com/" target="blank">Windows Phone 7手机开发</a>、<a href="http://net.itheima.com/" target="blank">.Net培训</a>、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值