基于Windows的套接字相关函数及示例
链接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的套接字相关函数及示例的更多相关文章
- windows套接字相关函数
windows套接字相关函数 作者:vpoet mail:vpoet_sir@163.com 我们学习TCP/IP协议无非是利用这些协议进行通信开发,然而如果让我们自己来直接根据协议规则和协议格式来进 ...
- 基于UDP的套接字、粘包问题
一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfro ...
- Python 37 基于多线程实现套接字 、gevent 、单线程下实现并发的套接字通信
一:基于多线程实现套接字 可添加多个客户端 from socket import * from threading import Thread def comunicate(conn): while ...
- python笔记8 socket(TCP) subprocess模块 粘包现象 struct模块 基于UDP的套接字协议
socket 基于tcp协议socket 服务端 import socket phone = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 买 ...
- Python网络编程之TCP套接字简单用法示例
Python网络编程之TCP套接字简单用法示例 本文实例讲述了Python网络编程之TCP套接字简单用法.分享给大家供大家参考,具体如下: 上学期学的计算机网络,因为之前还未学习python,而jav ...
- Day9 基于TCP的套接字和基于UDP的套接字
服务端: ss=socket() #创建服务器套接字 ss.bind() #把地址绑定到套接字 ss.listen() #监听套接字, inf_loop: #服务器无限循环 cs=ss.accept( ...
- 03、Windows Phone 套接字(Socket)实战之WP客户端设计
因为 PC 端和 WP 端进行通信时,采用的自定义的协议,所以也需要定义 DataType 类来判断 通信数据的类型,并且把数据的描述信息(head) 和数据的实际内容(body)进行拼接和反转,所以 ...
- 基于udp的套接字编程
一,简单明了了解udp套接字编程 客户端: #Author : Kelvin #Date : 2019/1/30 11:07 from socket import * ip_conf=("1 ...
- 基于udp的套接字
1 ss = socket() #创建一个服务器的套接字 2 ss.bind() #绑定服务器套接字 3 inf_loop: #服务器无限循环 4 cs = ss.recvfrom()/ss.send ...
随机推荐
- Linux -- Ubuntu搭建java开发环境
Steps 1 Check to see if your Ubuntu Linux operating system architecture is 32-bit or 64-bit, open up ...
- bzoj1267 3784
双倍经验题像这种方案太多不能全部求出来但求前k大一般有这样一个思路将所有方案无重复不漏的分为若干类,每个类的元素满足单调性,然后我们用堆维护就行了!对于这道题,可以想到用树的分治来处理路径,当处理根为 ...
- 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 ...
- C#图片处理之: 另存为压缩质量可自己控制的JPEG
处理图片时常用的过程是:读入图片文件并转化为Bitmap -> 处理此Bitmap的每个点以得到需要的效果 -> 保存新的Bitmap到文件使用C#很方便的就可以把多种格式的图片文件读到B ...
- sublimelinter-jshinter
--- ocalhost:~ nihao$ sudo npm install jshint -gPassword:/usr/local/bin/jshint -> /usr/local/lib/ ...
- Ubuntu13.04配置完全指南(转)
Ubuntu13.04配置完全指南(一)软件源 教育网推荐使用USTC软件源. 首先备份现有软件源: $ sudo cp /etc/apt/sources.list /etc/apt/sources. ...
- HW4.37
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...
- 并查集 poj1611&poj2492
poj1611 简单题 代码中id记录父节点,sz记录子树规模.一个集合为一棵树. #include <iostream> #include <cstdio> using na ...
- PTA 5-12 How Long Does It Take (25分)
这题看不太懂题目啊~ 参考的http://blog.csdn.net/qq_26437925/article/details/49420089?locationNum=6&fps=1 先放着 ...
- 【腾讯优测干货分享】如何降低App的待机内存(五)——优化dex相关内存及本章总结
本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/01Abwe0p1h3WLh28Tzg_Dw 1.5案例:优化dex相 ...