zoukankan      html  css  js  c++  java
  • 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();

    源码下载

  • 相关阅读:
    Java基本数据类型和长度
    Java transient关键字
    Java 使用StringBuffer注意
    JAVA启动参数整理
    Java中Integer和String浅谈
    SQLServer 理解copyonly备份操作
    for循环的三种写法
    泛型的其他应用-接口,方法定义使用,泛型数组,泛型的嵌套设置。
    泛型-通配符,受限泛型(上限和下限)
    泛型入门
  • 原文地址:https://www.cnblogs.com/hanmeimei/p/socket.html
Copyright © 2011-2022 走看看