• Socket编程初探


    一.什么是Socket?

          通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

    二.三次握手   

         在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。       

         第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;           

         第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态      

         第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次

    握手,客户端与服务器开始传送数据.

    三.Socket编程思路

       服务端:

       1.监听客户请求,使用Socket用于监听

       2.根据客户请求为客户创建Socket,为每一个客户创建新的Socket

       服务端至少需要两个Socket,一个Socket负责监听客户请求,另一个Socket用于处理客户请求

       客户端:

       1.向服务端发起请求,使用Socket用于请求服务端     

    四.实例

       服务端:

    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    
    namespace 套接字
    {
        public partial class ServerFrm : Form
        {
            //负责监听端口
            Socket sokWelcome = null;
            Thread thdWatchPort = null;
            //负责与客户端通信
            Socket sokConnection = null;
    
            public ServerFrm()
            {
                InitializeComponent();
    
                TextBox.CheckForIllegalCrossThreadCalls = false;
            }
    
            private void btnStartListen_Click(object sender, EventArgs e)
            {
                StartListen();
            }
    
            public void StartListen()
            {
                //获取IP地址
                IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
                //获取IP节点
                IPEndPoint endPoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));
                //创建监听套接字(寻址协议,流方式,TCP协议)
                sokWelcome = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                sokWelcome.Bind(endPoint);
                sokWelcome.Listen(10);
                ShowMessage("开始监听...");
                thdWatchPort = new Thread(WatchPort);
                thdWatchPort.Start();
            }
    
            public void WatchPort()
            {
                while (true)
                {
                    sokConnection = sokWelcome.Accept();
                    ShowMessage("监听到连接啦!!!");
                }    
            }
    
            public void ShowMessage(string message)
            {
                txtShowMessage.AppendText(message+"
    ");
            }
        }
    }
    

        客户端:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;
    
    namespace 套接字客户
    {
        public partial class ClientFrm : Form
        {
            Socket sokClient = null;
            Thread threadClient = null;
    
            public ClientFrm()
            {
                InitializeComponent();
            }
    
            private void btnConnect_Click(object sender, EventArgs e)
            {
                Connect();
            }
           
            private void Connect()
            {
                sokClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress address = IPAddress.Parse(txtIP.Text.Trim());
                IPEndPoint endPoint = new IPEndPoint(address, int.Parse(txtPort.Text.Trim()));
                sokClient.Connect(endPoint);
            }
        }
    }
  • 相关阅读:
    用于爬取知乎某个话题下的精华问题中所有回答的爬虫
    BSP -- 图书共享系统(Book Sharing Platform)
    【已解决】WPS2018 从第三页开始插入页眉页码(即前两页不要页眉页码)
    【编译原理】大白话讲解 First 集和 Follow 集的构造算法
    如果
    HTTP协议(1)------->资源和URL
    JavaWeb框架_Struts2_(八)----->Struts2的国际化
    深入理解java虚拟机----->垃圾收集器与内存分配策略(下)
    深入理解java虚拟机----->垃圾收集器与内存分配策略(上)
    JavaWeb框架_Struts2_(七)----->文件的上传和下载
  • 原文地址:https://www.cnblogs.com/the-three/p/3774514.html
Copyright © 2020-2023  润新知