sockets_socketserver - CSDN
精华内容
参与话题
  • Sockets通信实现代码

    2018-04-10 08:38:36
    学习一个新的东西,首先要知道其原理,对于Sockets的学习,可先看一下文档:http://blog.csdn.net/hulihui/article/details/3230503#st  点击打开链接刚开始是写代码实现了一个客户端和服务器的通讯,后来完善代码...

    学习一个新的东西,首先要知道其原理,对于Sockets的学习,可先看一下文档:http://blog.csdn.net/hulihui/article/details/3230503#st     点击打开链接

    刚开始是写代码实现了一个客户端和服务器的通讯,后来完善代码,实现了多个客户端与服务器端的通讯,由于原理是差不多的,这里就直接介绍多个客户端与服务器进行通讯。

    第一部分  窗体设计

    1.服务器端


    2.客户端


    第二部分  代码

    1.服务器端:
    – 申请一个socket (socketWatch)用来监听的
    – 绑定到一个IP地址和一个端口上
    – 开启侦听,等待接授客户端的连接
    – 当有连接时创建一个用于和连接进来的客户端进行通信的socket(socketConnection)
    – 即续监听,等侍下一个客户的连接

    [csharp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. //服务器端  
    2. using System.IO;  
    3. using System.Net;  
    4. using System.Threading;  
    5. using System.Net.Sockets;  
    6.   
    7. namespace SocketsServer  
    8. {  
    9.     public partial class Form1 : Form  
    10.     {  
    11.         public Form1()  
    12.         {  
    13.             InitializeComponent();  
    14.         }  
    15.   
    16.         Socket socketWatch = null;  
    17.         Thread threadWatch = null;  
    18.   
    19.         private void startconn_Click(object sender, EventArgs e)  
    20.         {  
    21.             socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
    22.             IPAddress ipaddress = IPAddress.Parse(localip.Text.Trim());  
    23.             IPEndPoint endpoint = new IPEndPoint(ipaddress, int.Parse(porttext.Text.Trim()));  
    24.             socketWatch.Bind(endpoint);  
    25.   
    26.   
    27.             socketWatch.Listen(10);  
    28.   
    29.             threadWatch = new Thread(WatchingConn);  
    30.             threadWatch.IsBackground = true;  
    31.             threadWatch.Start();  
    32.   
    33.             this.Invoke(new Action(() =>  
    34.             {  
    35.                 recmsg.AppendText("开始对客户端进行监听!" + "\r\n");  
    36.             }  
    37.                 ));  
    38.   
    39.         }  
    40.   
    41.           
    42.   
    43.         //保存了服务器端所有负责和客户端通信发套接字  
    44.         Dictionary<string, Socket> dictSocket = new Dictionary<string, Socket>();  
    45.         //保存了服务器端所有负责调用通信套接字.Receive方法的线程  
    46.         Dictionary<string, Thread> dictThread = new Dictionary<string, Thread>();  
    47.   
    48.   
    49.         //Socket socConn = null;  
    50.   
    51.         private void WatchingConn(object obj)  
    52.         {  
    53.   
    54.             while (true)  
    55.             {  
    56.                 Socket socConn = socketWatch.Accept();  
    57.   
    58.                 this.Invoke(new Action(() => {  
    59.                     //向下拉项中添加一个客户端的ip端口字符串,作为客户端的唯一标识  
    60.                     iptext.Items.Add(socConn.RemoteEndPoint.ToString());  
    61.                 }));  
    62.                   
    63.                 将与客户端通信的套接字对象sokConn添加到键值对集合中,并以客户端IP端口作为键  
    64.                 dictSocket.Add(socConn.RemoteEndPoint.ToString(), socConn);  
    65.                   
    66.   
    67.                 ParameterizedThreadStart pts = new ParameterizedThreadStart(RecMsg);  
    68.                 Thread trd = new Thread(pts);  
    69.                 trd.IsBackground = true;  
    70.                 trd.Start(socConn);  
    71.   
    72.                 dictThread.Add(socConn.RemoteEndPoint.ToString(), trd);  
    73.                 this.Invoke(new Action(()=>  
    74.                     {  
    75.                         recmsg.AppendText("客户端连接成功!" + "\r\n");  
    76.                     }  
    77.                     ));  
    78.   
    79.             }  
    80.   
    81.         }  
    82.   
    83.         private void RecMsg(object socketClientPara)  
    84.         {  
    85.             Socket socketRec = socketClientPara as Socket;  
    86.   
    87.             while (true)  
    88.             {  
    89.                 byte[] arrRecMsg = new byte[1024 * 1024];  
    90.   
    91.                 //int length = socketClient.Receive(arrRecMsg);//......wrong......  
    92.   
    93.                 int length = -1;  
    94.                 try  
    95.                 {  
    96.                     length = socketRec.Receive(arrRecMsg);  
    97.                 }  
    98.                 catch (SocketException ex)  
    99.                 {  
    100.                     MessageBox.Show("异常:" + ex.Message);  
    101.                     //从通信套接字集合中删除被中断连接的通信套接字对象  
    102.                     dictSocket.Remove(socketRec.RemoteEndPoint.ToString());  
    103.                     //从通信线程结合中删除被终端连接的通信线程对象  
    104.                     dictThread.Remove(socketRec.RemoteEndPoint.ToString());  
    105.                     //从列表中移除被中断的连接 ip:Port  
    106.                     iptext.Items.Remove(socketRec.RemoteEndPoint.ToString());  
    107.                     break;  
    108.                 }  
    109.   
    110.                 catch (Exception ex)  
    111.                 {  
    112.                     MessageBox.Show("异常:" + ex.Message);  
    113.                     break;  
    114.                 }  
    115.   
    116.                 string str = Encoding.UTF8.GetString(arrRecMsg, 0, length);  
    117.                 this.Invoke(new Action(() => {  
    118.                     recmsg.AppendText(iptext.Text + ":\r\n" + GetTime() + "\r\n" + str + "\r\n");  
    119.                 }));  
    120.   
    121.   
    122.                 Thread.Sleep(10);  
    123.             }  
    124.         }  
    125.   
    126.         private DateTime GetTime()  
    127.         {  
    128.             DateTime getTime = new DateTime();  
    129.             getTime = DateTime.Now;  
    130.             return getTime;  
    131.         }  
    132.   
    133.   
    134.         private void SendMsg(string sendMsg)  
    135.         {  
    136.             if (string.IsNullOrEmpty(iptext.Text))  
    137.             {  
    138.                 MessageBox.Show("请选择通信IP!");  
    139.             }  
    140.   
    141.             else  
    142.             {  
    143.                 byte[] strSendMsg = Encoding.UTF8.GetBytes(sendMsg);  
    144.                 string strClientKey = iptext.Text;//通过Key匹配对应ip地址的客户端  
    145.   
    146.                 dictSocket[strClientKey].Send(strSendMsg);  
    147.   
    148.                 this.Invoke(new Action(() =>  
    149.                 {  
    150.                     recmsg.AppendText("服务器:" + "\r\n" + GetTime() + "\r\n" + sendMsg + "\r\n");  
    151.   
    152.                 }));  
    153.                 sendmsg.Text = null;  
    154.   
    155.             }  
    156.         }  
    157.   
    158.         private void sendok_Click(object sender, EventArgs e)  
    159.         {  
    160.             SendMsg(sendmsg.Text.Trim());  
    161.   
    162.         }  
    163.   
    164.   
    165.     }  
    166. }  
    2.客户端:
    – 申请一个socket
    – 连接服务器(指明IP地址和端口号)
    [csharp] view plain copy 在CODE上查看代码片派生到我的代码片
    1. //客户端  
    2. using System.IO;  
    3. using System.Net;  
    4. using System.Net.Sockets;  
    5. using System.Threading;  
    6.   
    7. namespace SocketsClient  
    8. {  
    9.     public partial class Form1 : Form  
    10.     {  
    11.         public Form1()  
    12.         {  
    13.             InitializeComponent();  
    14.         }  
    15.   
    16.         Socket socketWatch = null;  
    17.         Thread threadWatch = null;  
    18.   
    19.         private void startconn_Click(object sender, EventArgs e)  
    20.         {  
    21.             socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  
    22.             IPAddress address = IPAddress.Parse(iptext.Text.Trim());  
    23.             IPEndPoint endpoint = new IPEndPoint(address, int.Parse(porttext.Text.Trim()));  
    24.   
    25.             socketWatch.Connect(endpoint);  
    26.            // socketWatch.Bind(endpoint);//...报错(服务器是Bind,客户端是Connect)...  
    27.   
    28.             threadWatch = new Thread(RecMsg);  
    29.             threadWatch.IsBackground = true;  
    30.             threadWatch.Start();  
    31.   
    32.         }  
    33.   
    34.   
    35.        
    36.   
    37.         private void RecMsg(object obj)  
    38.         {  
    39.             while (true)  
    40.             {  
    41.                 byte[] arrRecMsg = new byte[1024 * 1024];  
    42.                 int length = socketWatch.Receive(arrRecMsg);  
    43.                 string str = Encoding.UTF8.GetString(arrRecMsg, 0, length);  
    44.                 this.Invoke(new Action(() => {  
    45.                     recmsg.AppendText("服务器:" + "\r\n" + GetTime() + "\r\n" + str + "\r\n");  
    46.                 }));  
    47.   
    48.             }  
    49.         }  
    50.   
    51.         private DateTime GetTime()  
    52.         {  
    53.             DateTime getTime = new DateTime();  
    54.             getTime = DateTime.Now;  
    55.             return getTime;  
    56.         }  
    57.   
    58.   
    59.         private void SendMsg(string sendMsg)  
    60.         {  
    61.             byte[] strSenMsg = Encoding.UTF8.GetBytes(sendMsg);  
    62.             socketWatch.Send(strSenMsg);  
    63.   
    64.             this.Invoke(new Action(() =>  
    65.             {  
    66.                 recmsg.AppendText("客户端:" + "\r\n" + GetTime() + "\r\n" + sendMsg + "\r\n");  
    67.             }));  
    68.             sendmsg.Text = null;  
    69.         }  
    70.         private void sendok_Click(object sender, EventArgs e)  
    71.         {  
    72.             SendMsg(sendmsg.Text.Trim());  
    73.         }  
    74.     }  
    75. }  


    展开全文
  • 什么叫sockets

    2019-07-16 21:59:29
    Sockets are just like "worm holes" in science fiction. When things go into one end, they (should) come out of the other. Different kinds of sockets have different properties. Sockets are either conn.....

    Sockets are just like "worm holes" in science fiction. When things go into one end, they (should) come out of the other. Different kinds of sockets have different properties. Sockets are either connection-oriented or connectionless. Connection-oriented sockets allow for data to flow back and forth as needed, while connectionless sockets(also known as datagram sockets) allow only one message at a time to be transmitted, without an open connection. There are also different socket families. The two most common are AF_INET for internet connections, and AF_UNIX for unix IPC (interprocess communication).As stated earlier, this FAQ deals only with AF_INET sockets.

    参考:什么叫sockets

     

    转载于:https://www.cnblogs.com/phpcode/archive/2012/04/28/2522764.html

    展开全文
  • linux下开启php的sockets扩展支持

    千次阅读 2015-12-14 10:27:39
    下个相同版本的php源码,进行编译安装,再按照上面步骤搞,生成的so。...或者到网上找相同版本,相同系统 的编译好的so文件。 ... #cd /usr/soft/php/ext/sockets (进入原php安装文件下的sockets目录)  #/usr/local/p
    下个相同版本的php源码,进行编译安装,再按照上面步骤搞,生成的so。copy到rpm装的那个,修改php.ini进行扩展就行了,
    或者到网上找相同版本,相同系统 的编译好的so文件。
      在linux下给PHP安装socket扩展,参考方法如下:
      #cd /usr/soft/php/ext/sockets (进入原php安装文件下的sockets目录)
      #/usr/local/php/bin/phpize (运行安装后的php安装文件下的phpize)
      #./configure --prefix=/usr/local/php/lib --with-php-config=/user/local/php/bin/php-config --enable-sockets
      #make
      #make install
      再修改/usr/local/php/etc/php.ini文件
      #extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/" (php5.4版本以上不用加扩展路径)

      extension=sockets.so

      (若不想修改extension_dir路径或改路径下还有别的.so文件,亦可直接写:
        extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/sockets.so)

      重启apache或者nginx等进程,完成。
    展开全文
  • Sockets

    2019-05-27 21:26:01
    https://baike.baidu.com/item/sockets/3505925?fr=aladdin https://blog.csdn.net/hulihui/article/details/3230503#st http://www.biye5u.com/article/Csharp/netprog/2011/4361.html ...

    https://baike.baidu.com/item/sockets/3505925?fr=aladdin
    https://blog.csdn.net/hulihui/article/details/3230503#st
    http://www.biye5u.com/article/Csharp/netprog/2011/4361.html
    http://www.biye5u.com/article/Csharp/netprog/2010/2549.html
    https://blog.csdn.net/u011966339/article/details/54860737

    客户端
    namespace _1
    {
    class Program
    {
    static void Main()
    {
    try
    {
    int port = 81;//定义端口号
    string host = “127.0.0.1”;//主机 IP
    IPAddress ip = IPAddress.Parse(host);// IPAddress 提供网际协议 (IP) 地址。
    IPEndPoint ipe = new IPEndPoint(ip, port); //把ip 和端口转化为IPEndPoint 实例
    Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//实例化(创建)一个套接字接口
    // AddressFamily 寻址方案
    // InterNetwork IP 版本 4 的地址。
    // SocketType 制定套接字的类型
    // Stream 支持可靠、双向、基于连接的字节流,而不重复数据,也不保留边界。此类型的 Socket 与单个对方主机通信,并且在通信开始之前需要建立远程主机连接。System.Net.Sockets.SocketType.Stream
    // ProtocolType 指定套接用的协议
    // Tcp 传输控制协议。
    Console.WriteLine(“连接中…”);
    c.Connect(ipe);//连接到服务器
    string sendStr = “hey,boy”;
    byte[] bs = Encoding.ASCII.GetBytes(sendStr);//创建字节列表
    // Encoding 表示字符编码的类
    // ASCII 获取 ASCII(7 位)字符集的编码。
    // GetBytes 对指定的字符集进行编码 (将指定字符串中的所有字符编码为一个字节序列。)
    Console.WriteLine(“发送消息”);
    c.Send(bs, bs.Length, 0);//发送测试消息
    // Send 已发送到 System.Net.Sockets.Socket 的字节数。
    // bs System.Byte 类型的数组,它包含要发送的数据。
    // bs.Length 要发送的字节数。
    // 0 = None 不对此调用使用标志。是枚举 SocketFlags 下的一个值
    //
    string recvStr = “”;
    byte[] recvBytes = new byte[1024];
    int bytes;
    bytes = c.Receive(recvBytes, recvBytes.Length, 0);
    // recvBytes 储存数据的位置
    // recvBytes.Length 接收到的字节数
    // SocketFlags 指定套接字的发送和接收行为。
    // 0 = None 不对此调用使用标志。是枚举 SocketFlags 下的一个值
    // 从服务器 接受返货消息
    recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
    // Encoding 表示字符编码的类
    // ASCII 获取 ASCII(7 位)字符集的编码。
    // GetString 将指定字节数组中的一个字节序列解码为一个字符串。
    // recvBytes 包含要解码的字节序列的字节数组。
    // 0 第一个要解码的字节的索引。
    // bytes 要解码的字节数。
    Console.WriteLine(“ClientGetMessage:{0}”, recvStr);
    //显示服务器返货信息
    c.Close();

            }
            catch (ArgumentException e)//向方法提供的参数之一无效时引发的异常。
            {
    
                Console.WriteLine("ArgumentException : {0}", e);
            }
            catch(SocketException e)
            {
                Console.WriteLine("SocketException : {0}", e);
            }
            Console.WriteLine("PressEntertoExit");
            Console.ReadLine();
        }
    }
    

    }

    客户端:
    namespace _2
    {
    class Program
    {
    static void Main()
    {
    try
    {
    int port = 81;
    string host = “127.0.0.1”;
    IPAddress ip = IPAddress.Parse(host);
    IPEndPoint ipe = new IPEndPoint(ip, port);
    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    s.Bind(ipe);
    // 绑定2000 端口
    // Bind 与一个本地终结点相关联。
    s.Listen(0);
    //开始监听
    // Listen 置于侦听状态。直到挂起连接队列的最大长度
    Console.WriteLine(“等待连接”);

                Socket temp = s.Accept();//为新建连接创建新的Socket
                Console.WriteLine("连接");
                string recvStr = "";
                byte[] recvBytes = new byte[1024];
                int bytes;
                bytes = temp.Receive(recvBytes, recvBytes.Length, 0);//从客户端接受信息
                recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
                Console.WriteLine("ServerGetMessage:{0}",recvStr);//把客户端传来的信息显示出来
                string sendStr = "OK";
                byte[] bs = Encoding.ASCII.GetBytes(sendStr);
                temp.Send(bs, bs.Length, 0);
                temp.Close();
                s.Close();
            }
            catch (ArgumentNullException e)
            {
    
                Console.WriteLine("ArgumentNullException : {0}", e);
            }
            catch(SocketException e)
            {
                Console.WriteLine("SocketException :{0}", e);
            }
            Console.WriteLine("PressEnteroExit");
            Console.ReadLine();
        }
    }
    

    }

    展开全文
  • #include #include #include #include <arpa/inet.h> #include <netinet/in.h> #include <netinet/tcp.h> #include #include #include <netdb.h>
  • 什么是WebSockets!?

    千次阅读 2018-11-13 17:30:00
    到目前为止,我们已经深入到实时世界,因为许多应用程序使用实时数据。现在正是以技术立场解释所有导致这一点的事件的时候了。所以,这里...... 目前,应用程序正在从利用数据库中的陈旧数据或在实际事件之后的实时...
  • 使用Sockets

    2009-07-21 17:19:00
    使用sockets Socket控件让你建立一个利用TCP/IP和有关的协议与其他系统进行通信的应用。使用Sockets,你能够读和写通过它连接的其他机器,而不用担心实际的网络软件的相关细节。Sockets提供基于TCP/IP协议的连接。...
  •  通过Eclipse启动Tomcat时,抛出异常java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind。此异常的原因是服务器端口被占用   其解决办法包括以下两种:  一:更改服务器的端口号; ...
  • solution:
  • 报错:未经处理的异常:System.Net.Sockets.SocketException: 以一种访问权限不允许的方式做了一个访问套接字的尝试 → 尝试以"管理员身份"运行程序,不行。→ 点击菜单下的"运行",输入"...
  • fiddler dns lookup for failed System.Net.Sockets.SocketException 请求的名称 很多原因是因为没设置DNS
  • C# 创建ftp连接的时候报 System.Net.Sockets.SocketException] = {"不知道这样的主机。"} 检查本机网卡DNS配置 将DNS配置改为自动获取后 不报错了
  • 基本关系 sockets x cores x threads = 总vcpu数 有时候需要限制sockets的个数。例如windows server 2008 r2的不同版本,微软对物理CPU个数进行了限制: windows server 2008 r2 支持sockets 标准版...
  • step1:启动 由于是在自己的本本里面干活,本本还用作家庭娱乐,所以不想自动启动apache等,希望我自己启动的时候就启动。  一般手法是,cmd中输入services.msc(这个后缀名有点难记,后来查了下,就简单了,...
  • 今天用C#做Socket方面的问题时,碰到了这个问题,解决方案 cmd下: netstat -a 看端口是否被占用,发现端口被占用了,所以改下端口就好
  • 最近在启动tomcat的时候抛出异常Java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind异常,该异常的意思是你tomcat服务器的端口被占用了,比如我的端口是8080。  解决方法一般分为两种: ...
  • web_set_sockets_option()--常用函数 设置sockets的选项。 intweb_set_sockets_option(const char * option,const char * value); 该函数是对图形化操作界面中的Recording Options àNetwork/Port Mapping/...
  • ![图片说明](https://img-ask.csdn.net/upload/201610/02/1475377101_165736.png) 有人知道这个怎么解决吗??
  • WSAStartup与WSACleanup

    万次阅读 2012-05-20 13:53:12
    WSAStartup与WSACleanup WSAStartup应该与WSACleanup成对使用,WSAStartup的功能是初始化Winsock DLL,WSACleanup是来解除与Socket库的绑定并且释放Socket库所占用的系统资源。 在Windows下,Socket是以DLL的...
  • 这种问题通常是端口占用了,先查看是否端口占用: 分别查看8888端口和8800端口,这两个端口是都是SuperMap IS 配置文件中使用的端口: ...接下来我们去查看SuperMap IS.Net安装目录下的Bin文件下的Log文件夹,...
1 2 3 4 5 ... 20
收藏数 116,385
精华内容 46,554
关键字:

sockets