关于windows程序相关基础技术的一点小结(2.windows socket 篇)

 还是直入主题,学会了基础的S - C 链接

1.Server端

WSADATA wsaData;
   //(1)初始化Socket库
   WSAStartup(MAKEWORD(2,0),&wsaData);


   //(2)创建一根电线,即初始化socket结构
   SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

  //(3)设置绑定端口

SOCKADDR_IN sa;
   sa.sin_family=AF_INET;
   //设置连接客户端的监听端口
   sa.sin_port = htons(1500);
      //主机监听的ip地址
   sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
   (4)绑定端口

   if(bind(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
   {
    //ShowError();//这个函数是自己定义的,这里是用来显示绑定后错误的,因为链接常常会发生错误,需要收集这些错误;
    break;
   }

  //(5)开始监听该端口,前一个是初始化好的socket,后一个是支持的最大连接数
   listen(sock, 2); 

  //新的地址信息和新的套接字(socket),马上要用到。

  SOCKADDR nsa;
   SOCKET nsocket;

   //  用于满足accept函数的最后一个参数

    int addlen = sizeof(SOCKADDR);

   //(6)接受链接,这里说明一下,程序运行到listen函数后,就暂停了,直到有程序请求链接,才会运行到这一步
   nsocket = accept(sock, &nsa, &addlen);

  //至此,程序就可以调用send 和 recv函数来收发数据了。

2.客户端Client

客户端的编写相对简单,前面与服务端类似。

   WSADATA wsaData;
   //(1)初始化Socket库
   WSAStartup(MAKEWORD(2,0),&wsaData);
   //(2)初始化socket结构
   SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   SOCKADDR_IN sa;
   sa.sin_family=AF_INET;
   //(3)设置电线连接服务器端的端口
   sa.sin_port = htons(1500);
   //(4)设置服务器IP 地址
   sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
   //(5)链接服务器

   if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
   {
    ShowError();//同上
    break;
   }

   //至此,也可以开始收发信息了。

 

3.收发信息

大致提一下send 和 recv,

int PASCAL FAR send( SOCKET s, const char FAR* buf, int len, int flags);

  s:一个用于标识已连接套接口的描述字。

  buf:包含待发送数据的缓冲区

  len:缓冲区中数据的长度。

  flags:调用执行方式。

标志位可取下列值: (一般取0)

  值 意义

  MSG_DONTROUTE 指明数据不选径。

  MSG_OOB 处理带外数据。

 

 

int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);

  s:一个标识已连接套接口的描述字。

  buf:用于接收数据的缓冲区

  len:缓冲区长度。

  flags:指定调用方式。

标志位可取下列值:(一般取0)

  值 意义

  MSG_PEEK查看当前数据。数据将被复制到缓冲区中,但并不从输入队列中删除。

  MSG_OOB 处理带外数据。

 

这两个函数调用后产生的错误需要调用WSAGetLastError()或者GetLastError()获取相应错误代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值