• Socket编程基础


    参考资料:

    Socket编程的原理 ①    

    Socket编程的实例   

    Socket位于TCP/IP协议中的应用层与网络层之间,如下图:

    大体流程如下图:

    using System.Net

    using System.Net.Sockets

    服务器端

    创建流式(SocketType.Stream)套接字-----Socket()

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    addressFamily参数指定Socket使用的寻址方案,socketType参数指定Socket的类型,protocolType参数指定Socket使用的协议

    使Socket与一个本地终结点(IPEndPoint)相联-----Bind()

    IPAddress ip = IPAddress.Any;   会自动运算本机IP地址并返回一个IPAddress实例,还可以IPAddress ip=IPAddress.Parse(ip地址的字符串)

    IPEndPoint iep=new IPEndPoint(ip,端口);  参数是一个IPAddress实例和整型的端口,返回一个本地终结点

    socket.Bind(iep);

    使Socket与一个本地终结点连接侦听该接口上的请求-----Listen()

    socket.Listen(10);  参数指定队列中最多可容纳的等待接受的传入连接数,默认为5

    当侦听到用户端的连接时调用Accept完成连接的操作-----Accept() 

    Accept()方法会产生一个新的Socket对象来处理客户端的连接,而原来的Socket对象继续监听端口的请求

    while (true)  

    {    

    Socket temp = socket.Accept();     

    byte[] rebuffer = new byte[1024];   建立用于存储客户端信息的字节流数组

    将接收到的字节流存入字节数组-----Receive()    

    int len = temp.Receive(rebuffer,0,rebuffer.Length)  Receive()方法返回已接受的字节数,还有一种BeginReceive()用于异步接收数据    

    string reinfo += Encoding.ASCII.GetString(rebuffer,0,len);  将接收到的字节流解码为一个字符串    

    string seinfo="我已收到!"    

    byte[] sebuffer = Encoding.ASCII.GetBytes(seinfo);  将要发的字符串中的所有字符编码为一个字节数组

    将数据发送到连接的客户端的Socket-----Send()    

    temp.Send(sebuffer,0,sebuffer.Length);    

    temp.Close(); 

     }
    客户端

    Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    IPAddress ip = IPAddress.Parse("服务器的ip地址");

    IPEndPoint ipe = new IPEndPoint(ip,"服务器的开放端口");

    socket.Connect(ipe);   与远程主机的一个socket连接

    string seinfo="收到了吗?";

    byte[] sebuffer = Encoding.ASCII.GetBytes(seinfo);

    socket.Send(sebuffer,0,sebuffer.Length);

    byte[] rebuffer = new bytep[1024];

    int len = socket.Receive(rebuffer,0,rebuffer.Length);

    string reinfo = Encoding.ASCII.GetString(rebuffer,0,len);

    scoket.close();

    源码下载

  • 相关阅读:
    HelloWorld入门代码
    Java语言概述
    程序的载入和运行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
    java cup占用高分析脚本
    插入排序+冒泡排序+选择排序
    浅谈图片载入的三级缓存(一)
    互联网广告的个性化推荐平台设计--相关知识
    Eclipse打包Android项目时用到proguard.cfg后,出现的Warning:can't find referenced class问题的解决方式
    计数排序
    《Getting Started with WebRTC》第二章 WebRTC技术介绍
  • 原文地址:https://www.cnblogs.com/hanmeimei/p/socket.html
Copyright © 2020-2023  润新知