基于Windows的套接字相关函数及示例

链接ws2_32.lib库

头文件#include <winsock2.h>

Winsock初始化

1  int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);

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

lpWSAData:WSADATA结构体变量的地址。

 1 #include <WinSock2.h>
 2 #include <iostream>
 3
 4 namespace WinSock {
 5
 6     void ErrorHandling(char* message) {
 7         std::cerr << message << std::endl;
 8         exit(1);
 9     }
10
11     int Server(int port) {
12         WSADATA wsaData;
13         SOCKET hServSock, hClntSock;
14         SOCKADDR_IN servAddr, clntAddr;
15         int szClntAddr;
16         char message[] = "Hello World!";
17         if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error");
18         hServSock = socket(PF_INET, SOCK_STREAM, 0);
19         if (hServSock == INVALID_SOCKET) ErrorHandling("socket() error");
20         memset(&servAddr, 0, sizeof(servAddr));
21         servAddr.sin_family = AF_INET;
22         servAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
23         servAddr.sin_port = htons(port);
24         if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("bind() error");
25         if (listen(hServSock, 5) == SOCKET_ERROR) ErrorHandling("listen() error");
26         szClntAddr = sizeof(clntAddr);
27         hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr);
28         if (hClntSock == INVALID_SOCKET) ErrorHandling("accept() error");
29         send(hClntSock, message, sizeof(message), 0);
30         closesocket(hClntSock);
31         closesocket(hServSock);
32         WSACleanup();
33         return 0;
34     }
35
36     int Client(char ip[], int port) {
37         WSADATA wsaData;
38         SOCKET hSocket;
39         SOCKADDR_IN servAddr;
40         char message[30];
41         int strLen;
42         if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) ErrorHandling("WSAStartup() error");
43         hSocket = socket(PF_INET, SOCK_STREAM, 0);
44         if (hSocket == INVALID_SOCKET) ErrorHandling("socket() error");
45         memset(&servAddr, 0, sizeof(servAddr));
46         servAddr.sin_family = AF_INET;
47         servAddr.sin_addr.S_un.S_addr = inet_addr(ip);
48         servAddr.sin_port = htons(port);
49         if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) ErrorHandling("connect() error");
50         strLen = recv(hSocket, message, sizeof(message) - 1, 0);
51         if (strLen == -1) ErrorHandling("read() error");
52         std::cout << "Message from server: " << message << std::endl;
53         closesocket(hSocket);
54         WSACleanup();
55         return 0;
56     }
57
58 };
时间: 2025-01-18 10:47:58

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

windows套接字相关函数

windows套接字相关函数 作者:vpoet mail:[email protected] 我们学习TCP/IP协议无非是利用这些协议进行通信开发,然而如果让我们自己来直接根据协议规则和协议格式来 进行网络开发无疑是一件十分痛苦的事情,显然为了减轻程序员的开发负担,windows提供给我们一套网络开发 的API,这个API族就叫做套接字库. 但是套接字和TCP/IP协议到底是什么关系呢. 我们暂且可以这样理解,如图: 那么OK,理解不了我们也暂且这样理解吧. 接下来我们讲讲使用套接字编程主要用

Day35:基于UDO的套接字、粘包问题

一.基于UDP的套接字 UDP服务端 ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 inf_loop: #服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 UDP客户端 cs = socket() # 创建客户套接字 comm_loop: # 通讯循环 cs.sendto()/cs.recvfrom() # 对话(发送/接收) cs.close() #

python基于udp的套接字

1.基于udp的套接字 (1)udp不会产生粘包现象 (2)udp是无链接的,先启动哪一端都不会报错. (3)upd是无连接的,所以可以同时多个客户端跟服务端通信. 2.代码例子 服务端: from socket import * udp_server=socket(AF_INET,SOCK_DGRAM) #创建一个服务器的套接字 udp_server.bind(('127.0.0.1',8080)) #绑定一个服务器套接字 while True: data,client_addr=udp_se

基于流式套接字的回射客服端编程程序

基于流式套接字的回射客服端编程程序 #include <WS2tcpip.h> #include<unistd.h> #include<stdio.h> #include<string.h> #include<stdlib.h> #include <winsock2.h> #define MAXLINE 512 #define PORT 7210 //填服务器端口号 #define IP_ADDRESS "127.0.0.1

Windows异步套接字(WSASocket)

异步套接字: 如果使用阻塞的套接字的话,在控制台下还好!如果是WIN32程序的话,那么就容易造成界面的假死,因为接收函数一直等待有消息进来之后才会被返回!所以此时界面一直属于假死的状态,如果你乱动的话,那么就容易真死了.解决办法如下: 第一:使用多线程技术,多线程和SOCKET结合的话,可以使用单独一个线程来接收消息.这样即使接收函数阻塞了也不会影响其他线程,例如界面线程.但是如果使用多线程的话,就必须要考虑到多线程之间同步的问题,以及临界资源的问题. 第二:使用异步套接字.但是使用异步套接字的

套接字相关函数

加载套接字库并进行版本协商Int WSAStartup(WORD wVersionRequested,//请求的版本号,低字节代表主版本,高字节代表副版本,一般我们用MAKEWORD(x,y)//宏来指定版本号,如:MAKEWORD(2,1)代表2.1的版本LPWSADATA lpWSAData//一个WSADATA结构体指针,用于接收实际加载的套接字 库版本号) 创建套接字SOCKET socket(int af, //指定协议族,也即网际域,对于windows平台总是AF_INET 或 PF

python基础之socket编程-------基于tcp的套接字实现远程执行命令的操作

远程实现cmd功能: import socket import subprocess phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bind(("127.0.0.1",8080)) phone.listen(5) print("starting....") while True: conn,addr=phone.accept() while True: try: date=conn.recv

理解网络编程和套接字

编写“Hello world!”服务器端 服务器端(server)是能够受理连接请求的程序.下面构建服务器端以验证之前提到的函数调用过程,该服务器端收到连接请求后向请求者返回“Hello world!”答复.除各种函数的调用顺序外,我们还未涉及任何实际编程.因此,阅读代码时请重点关注套接字相关函数的调用过程,不必理解全部示例. hello_server.c 1.  #include <stdio.h> 2.  #include <stdlib.h> 3.  #include <

基于UDP协议的socket套接字编程 基于socketserver实现并发的socket编程

基于UDP协议 的socket套接字编程 1.UDP套接字简单示例 1.1服务端 import socket server = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 建立一个UDP协议的服务器 server.bind(("127.0.0.1",8080)) while True: data,addr = server.recvfrom(1024) server.sendto(data.upper(),addr) server