链接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. Delphi开发嵌入IE的OCX,调用页面上JavaScript的方法

    利用Delphi的ActiveForm,可以很方便地开发出可以嵌入IE的ActiveX组件,无需知道太多幕后的COM知识.如何使得OCX可以很方便地调用Web上的JavaScript函数呢,研究了一个 ...

  2. 在 Windows Azure 上部署并定制化 FreeBSD 虚拟机镜像

     发布于 2014-12-11 作者 陈阳 FreeBSD 基础镜像现已登陆中国的 VM Depot! 对于青睐 BSD 而非 Linux 的开源爱好者来说,这无疑是个好消息.同时,随着该基础镜像 ...

  3. apache开源项目--Apache Commons Imaging

    Apache Commons Imaging 前身是 Apache Commons Sanselan ,这是一个用来读写各种图像格式的 Java 类库,包括快速解析图片的基本信息(大小.色彩空间.IC ...

  4. 转 Xcode磁盘空间大清理

    http://www.iwangke.me/2013/09/09/clean-xcode-to-free-up-disk-space/#jtss-tsina 我的设备是Macbook Air 13’ ...

  5. 《C#并行编程高级教程》第5章 协调数据结构 笔记

    本章介绍了一些轻量级的同步原语,其中有很大部分是.NET Framework 4才引入的. System.Threading.Barrier 用于一段程序分成多个阶段,每个阶段的开始都需要之前的阶段完 ...

  6. XmlNode中Value和InnerText的区别

    XmlNode中Value和InnerText的区别   这个问题我想很多人在使用.NET 操作 Xml 文档时都遇到过,先看一下MSDN里对这两个属性的解释: XmlNode.Value:获取或设置 ...

  7. mongodb c++ driver(2.53)windows编译

    编译环境: (1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用: (2) 下载scons2.3.0,The current production release ...

  8. HW4.33

    public class Solution { public static void main(String[] args) { int sum; for(int i = 6; i < 1000 ...

  9. Android: Dragging Popup Window 可移动浮动View

    final View cv = new View(this); setContentView(cv); TextView tv = new TextView(this); tv.setBackgrou ...

  10. ZOJ3471--Most Powerful(状压DP)

    有n(n<10)个小球,每两个碰撞有其中一个会消失,并产生一定能量.求产生最大能量. 有了正确思路题目比较简单,我的思路果然是歪的... 我的思路是dp[i][j]表示i这个状态剩下第j个小球, ...