链接ws2_32.lib库

头文件#include <winsock2.h>

  int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);

初始化Winsock库

wVersionRequested:Winsock版本信息,用MAKEWORD宏构造,MAKEWORD(2,2)。

lpWSAData:WSADATA结构体变量的地址。无特殊含义,但是要传递结构体变量地址。

 int WSACleanup();

注销Winsock相关库,成功返回0,失败返回SOCKET_ERROR。

 SOCKET socket(int af, int type, int protocol);

成功返回套接字句柄,失败返回INVALID_SOCKET。

af:套接字中使用的协议族信息,常用的是PF_INET,IPv4互联网协议族。

type:套接字数据传输类型信息。有面向连接的套接字(SOCK_STREAM),面向消息的套接字(SOCK_DGRAM)。

protocol:计算机间通信中使用的协议信息。选择最终协议,IPv4网络协议族中面向连接的协议(IPPROTO_TCP),面向消息的协议(IPPROTO_UDP)。

 int bind(SOCKET s, struct sockaddr * name, int namelen);

成功返回0,失败返回SOCKET_ERROR。

 int listen(SOCKET s, int backlog);

成功返回0,失败返回SOCKET_ERROR。

 SOCKET accept(SOCKET s, struct sockaddr * addr, int * addrlen);

成功返回套接字句柄,失败返回INVALID_SOCKET。

 int connect(SOCKET s, struct sockaddr * name, int namelen);

成功返回0,失败返回SOCKET_ERROR。

 int closesocket(SOCKET s);

关闭套接字,成功返回0,失败返回SOCKET_ERROR。

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

数据传输函数,成功返回传输字节数,失败返回SOCKET_ERROR。

s:数据传输对象连接的套接字句柄值。

buf:保存待传输数据的缓冲地址值。

len:要传输的字节数。

flags:传输数据时要用到的多种选项信息。

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

成功时返回接受的字节数,收到EOF时为0,失败时返回SOCKET_ERROR。

s:数据接收对象连接的套接字句值。

buf:保存接收数据的缓冲地址值。

len:能够接受的最大字节数。

flags:接受数据时用到的多种选项信息。

 #include <WinSock2.h>
#include <iostream> namespace WinSock { void ErrorHandling(char* message) {
std::cerr << message << std::endl;
exit();
} int Server(int port) {
WSADATA wsaData;
SOCKET hServSock, hClntSock;
SOCKADDR_IN servAddr, clntAddr;
int szClntAddr;
char message[] = "Hello World!";
if (WSAStartup(MAKEWORD(, ), &wsaData) != ) ErrorHandling("WSAStartup() error");
hServSock = socket(PF_INET, SOCK_STREAM, );
if (hServSock == INVALID_SOCKET) ErrorHandling("socket() error");
memset(&servAddr, , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
servAddr.sin_port = htons(port);
if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("bind() error");
if (listen(hServSock, ) == SOCKET_ERROR) ErrorHandling("listen() error");
szClntAddr = sizeof(clntAddr);
hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);
if (hClntSock == INVALID_SOCKET) ErrorHandling("accept() error");
send(hClntSock, message, sizeof(message), );
closesocket(hClntSock);
closesocket(hServSock);
WSACleanup();
return ;
} int Client(char ip[], int port) {
WSADATA wsaData;
SOCKET hSocket;
SOCKADDR_IN servAddr;
char message[];
int strLen;
if (WSAStartup(MAKEWORD(, ), &wsaData) != ) ErrorHandling("WSAStartup() error");
hSocket = socket(PF_INET, SOCK_STREAM, );
if (hSocket == INVALID_SOCKET) ErrorHandling("socket() error");
memset(&servAddr, , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.S_un.S_addr = inet_addr(ip);
servAddr.sin_port = htons(port);
if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("connect() error");
strLen = recv(hSocket, message, sizeof(message) - , );
if (strLen == -) ErrorHandling("read() error");
std::cout << "Message from server: " << message << std::endl;
closesocket(hSocket);
WSACleanup();
return ;
} };

基于Windows的套接字相关函数及示例的更多相关文章

  1. windows套接字相关函数

    windows套接字相关函数 作者:vpoet mail:vpoet_sir@163.com 我们学习TCP/IP协议无非是利用这些协议进行通信开发,然而如果让我们自己来直接根据协议规则和协议格式来进 ...

  2. 基于UDP的套接字、粘包问题

    一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfro ...

  3. Python 37 基于多线程实现套接字 、gevent 、单线程下实现并发的套接字通信

    一:基于多线程实现套接字 可添加多个客户端 from socket import * from threading import Thread def comunicate(conn): while ...

  4. python笔记8 socket(TCP) subprocess模块 粘包现象 struct模块 基于UDP的套接字协议

    socket 基于tcp协议socket 服务端 import socket phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 买 ...

  5. Python网络编程之TCP套接字简单用法示例

    Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...

  6. Day9 基于TCP的套接字和基于UDP的套接字

    服务端: ss=socket() #创建服务器套接字 ss.bind() #把地址绑定到套接字 ss.listen() #监听套接字, inf_loop: #服务器无限循环 cs=ss.accept( ...

  7. 03、Windows Phone 套接字(Socket)实战之WP客户端设计

    因为 PC 端和 WP 端进行通信时,采用的自定义的协议,所以也需要定义 DataType 类来判断 通信数据的类型,并且把数据的描述信息(head) 和数据的实际内容(body)进行拼接和反转,所以 ...

  8. 基于udp的套接字编程

    一,简单明了了解udp套接字编程 客户端: #Author : Kelvin #Date : 2019/1/30 11:07 from socket import * ip_conf=("1 ...

  9. 基于udp的套接字

    1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.send ...

随机推荐

  1. Linux -- Ubuntu搭建java开发环境

    Steps 1 Check to see if your Ubuntu Linux operating system architecture is 32-bit or 64-bit, open up ...

  2. bzoj1267 3784

    双倍经验题像这种方案太多不能全部求出来但求前k大一般有这样一个思路将所有方案无重复不漏的分为若干类,每个类的元素满足单调性,然后我们用堆维护就行了!对于这道题,可以想到用树的分治来处理路径,当处理根为 ...

  3. c程序设计语言_习题1-19_编写函数reverse(s)将字符串s中字符顺序颠倒过来。

    Write a function reverse(s) that reverses the character string s . Use it to write a program that re ...

  4. C#图片处理之: 另存为压缩质量可自己控制的JPEG

    处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件使用C#很方便的就可以把多种格式的图片文件读到B ...

  5. sublimelinter-jshinter

    --- ocalhost:~ nihao$ sudo npm install jshint -gPassword:/usr/local/bin/jshint -> /usr/local/lib/ ...

  6. Ubuntu13.04配置完全指南(转)

    Ubuntu13.04配置完全指南(一)软件源 教育网推荐使用USTC软件源. 首先备份现有软件源: $ sudo cp /etc/apt/sources.list /etc/apt/sources. ...

  7. HW4.37

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  8. 并查集 poj1611&poj2492

    poj1611 简单题 代码中id记录父节点,sz记录子树规模.一个集合为一棵树. #include <iostream> #include <cstdio> using na ...

  9. PTA 5-12 How Long Does It Take (25分)

    这题看不太懂题目啊~  参考的http://blog.csdn.net/qq_26437925/article/details/49420089?locationNum=6&fps=1 先放着 ...

  10. 【腾讯优测干货分享】如何降低App的待机内存(五)——优化dex相关内存及本章总结

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/01Abwe0p1h3WLh28Tzg_Dw 1.5案例:优化dex相 ...