网络编程(windows socket编程)

TCP服务器端代码:

 1 // TcpSrv.cpp: 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include<Windows.h>
 6 #pragma comment(lib,"ws2_32.lib")
 7
 8 int main()
 9 {
10     //************加载套接字库*****************
11     WORD wVersionRequested;
12     WSADATA wsaData;
13     int err;
14
15     wVersionRequested = MAKEWORD(2,2);//Winsock库版本,低字节代表主版本,高字节代表副版本
16     err = WSAStartup(wVersionRequested, &wsaData);
17     if (err != 0)
18     {
19         return false;
20     }
21     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
22     {
23         WSACleanup();//终止对winsock库的使用
24         return false;
25     }
26
27     //***********创建套接字********************
28
29     //parameter int af:指定协议族,即网际域,Windows平台总是AF_INET或TF_INET
30     //parameter int type:套接字类型
31     //parameter int protocal:协议类型,一般设为0,自动设置
32     SOCKET sockSrv = socket(AF_INET,SOCK_STREAM,0);
33
34     //************绑定到本机地址和端口***********
35     SOCKADDR_IN addrSrv;//本机地址结构体信息,除了sin_family,其它字段都需要采用网络字节序
36     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//htonl转换为网络字节序,转换的是u_long类型
37     addrSrv.sin_family = AF_INET;
38     addrSrv.sin_port = htons(6000);//htons转换为网络字节序,转换的是u_short类型
39
40     //绑定,由于第二个参数会随网络协议的不同而变化,所以第三个参数指定地址结构的长度
41     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
42
43     //*************监听************************
44     listen(sockSrv,5);//5表示连接队列
45
46     while (1)
47     {
48         SOCKADDR_IN addrClient;//用于接收客户端的地址信息
49         int len = sizeof(SOCKADDR);//这个参数必须初始化
50
51         //*************建立连接************************
52         //接受客户端的连接,返回一个新的套接字。之前的套接字sockSrv依然用于监听
53         SOCKET sockConn = accept(sockSrv,(SOCKADDR*)&addrClient,&len);
54
55         //*************发送数据************************
56         char sendBuf[100];
57         //inet_ntoa表示将网络用的ip地址转换为点分十进制的形式,并返回成字符串
58         //inet_addr将点分十进制地址转换为一个无符号整形表示形式
59         sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));
60
61         send(sockConn, sendBuf, strlen(sendBuf) + 1,0);
62
63         //*************接收数据************************
64         char recvBuf[100];
65         recv(sockConn,recvBuf,100,0);
66         printf("%s",recvBuf);
67
68         //*************关闭套接字**********************
69         closesocket(sockConn);
70     }
71     // 退出while循环后,关闭sockSrv以及清理套接字即可
72
73     return 0;
74 }

TCP客户端端代码:

 1 // TcpClient.cpp: 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include<Winsock2.h>
 6 #pragma comment(lib,"ws2_32.lib")
 7 int main()
 8 {
 9     //************加载套接字库*****************
10     WORD wVersionRequested;
11     WSADATA wsaData;
12     int err;
13     wVersionRequested = MAKEWORD(2,2);
14     err = WSAStartup(wVersionRequested,&wsaData);
15     if (err != 0)
16     {
17         return false;
18     }
19     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
20     {
21         WSACleanup();
22         return false;
23     }
24
25     //***********创建套接字********************
26     SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);
27
28     //************连接服务器*******************
29     SOCKADDR_IN addrSrv;
30     addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
31     addrSrv.sin_family = AF_INET;
32     addrSrv.sin_port = htons(6000);
33     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
34
35     //************接收数据*********************
36     char recvBuf[100];
37     recv(sockClient,recvBuf,100,0);
38     printf("%s\n",recvBuf);
39     //************发送数据*********************
40     send(sockClient,"This is Client",strlen("This is Client")+1,0);
41
42     closesocket(sockClient);//关闭套接字
43     WSACleanup();//终止套接字库的使用
44
45     system("pause");
46     return 0;
47 }

UDP服务端代码:

 1 // udpSrv.cpp: 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include<WinSock2.h>
 6 #pragma comment(lib, "ws2_32.lib")
 7 int main()
 8 {
 9     //*************加载套接字库***************
10     WORD wVersionRequested;
11     WSADATA wsaData;
12     int err;
13
14     wVersionRequested = MAKEWORD(2, 2);
15     err = WSAStartup(wVersionRequested,&wsaData);
16
17     if (err != 0)
18     {
19         return false;
20     }
21     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
22     {
23         return false;
24         WSACleanup();
25     }
26
27     //*************创建套接字***************
28     SOCKET sockSrv = socket(AF_INET,SOCK_DGRAM,0);
29
30     //*************绑定到地址结构上***************
31     SOCKADDR_IN addrSrv;
32     addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
33     addrSrv.sin_family = AF_INET;
34     addrSrv.sin_port = htons(6000);
35
36     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
37
38     //*************接收********************
39     SOCKADDR_IN addrClient;
40     int len = sizeof(SOCKADDR);
41     char recvBuf[100];
42     recvfrom(sockSrv, recvBuf,100,0,(SOCKADDR*)&addrClient,&len);
43     printf("%s\n", recvBuf);
44
45     //*************关闭套接字***************
46     closesocket(sockSrv);
47     WSACleanup();
48
49     system("pause");
50     return 0;
51 }

UDP客户端代码:

 1 // udpClient.cpp: 定义控制台应用程序的入口点。
 2 //
 3
 4 #include "stdafx.h"
 5 #include<WinSock2.h>
 6 #pragma comment(lib, "ws2_32.lib")
 7
 8 int main()
 9 {
10     //*************加载套接字库***************
11     WORD wVersionRequested;
12     WSADATA wsaData;
13     int err;
14
15     wVersionRequested = MAKEWORD(2, 2);
16     err = WSAStartup(wVersionRequested, &wsaData);
17
18     if (err != 0)
19     {
20         return false;
21     }
22     if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
23     {
24         return false;
25         WSACleanup();
26     }
27     //****************创建套接字***********************
28     SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0);
29
30     //****************发送数据***********************
31     SOCKADDR_IN addrSrv;
32     addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
33     addrSrv.sin_family = AF_INET;
34     addrSrv.sin_port = htons(6000);
35     int len = sizeof(SOCKADDR);
36
37     sendto(sockClient,"hello",sizeof("hello")+1,0,(SOCKADDR*)&addrSrv,len);
38
39     //****************关闭套接字***********************
40     closesocket(sockClient);
41     WSACleanup();
42
43     system("pause");
44     return 0;
45 }

原文地址:https://www.cnblogs.com/cainiao-xf/p/8213974.html

时间: 2024-10-11 14:05:17

网络编程(windows socket编程)的相关文章

Windows Socket编程示例-TCP示例程序

前面一部分是介绍,后面有示例 1.网络中进程之间如何通信? 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问题,网络层的"ip地址"可以唯一标识网络中的主机,而传输层的"协议+端口"可以唯一标识主机中的应用程序(进程).这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互. 使用TCP

Windows Socket 编程_单个服务器对多个客户端简单通讯

单个服务器对多个客户端程序: 一.简要说明 二.查看效果 三.编写思路 四.程序源代码 五.存在问题 一.简要说明: 程序名为:TcpSocketOneServerToMulClient 程序功能:实现单个服务器对多个客户端通讯功能的小程序. PS: 这是继上次简单的 Tcp Windows Socket 编程后的再一程序,程序实现依然不是很严谨,还待完善~ 二.查看效果: 三.编写思路: 由上一次的程序思路来看,如果想实现单个服务器对多个客户端程序的通讯的话,这次程序编写尝试从多线程的角度来考

Windows Socket编程--ip地址转换

在Windows Socket编程中,需要将ip地址在网络字节顺序与主机字节顺序之间进行转换,该过程的代码如下: 1 #include <Winsock2.h> 2 #include <Ws2tcpip.h> //为了使用inet_pton()和inet_ntop()函数 3 #include <iostream> 4 5 #pragma comment(lib,"ws2_32.lib") //socket编程需要引用该库 6 7 using std

【windows socket编程+服务器客户端】

Windows Socket编程与服务器客户端示例 Winsock是 Windows下套接字标准. Socket套接字基于计算机网络,提供同一系统上不同进程或由局域网连接在一起的不同机器上的进程间通讯功能.如下图: 套接字通过IP地址,Port端口号标识,通过这个标识可以在整个局域网定位一个套接字,通过套接字进程便可以相互传输数据.如:进程A与进程B之间欲通过套接字通信,首先进程A创建一个有IP地址,端口号唯一标识的套接字,进程B同样创建一个有IP地址,端口号唯一标识的套接字,进程A,B便可以通

多线程编程以及socket编程_Linux程序设计4chapter15

看了Linux程序设计4中文版,学习了多线程编程和socket编程.本文的程序参考自Linux程序设计4的第15章. 设计了一个客户端程序,一个服务端程序.使用TCP协议进行数据传输. 客户端进程创建了一个客户端使用的socket,一个socket地址结构体.设置这个socket地址结构体的端口和地址为要连接的服务端的端口和ip.然后使用客户端的socket尝试连接服务端(connect),如果连接失败直接退出.如果连接成功,则使用这个连接成功的socket进行数据传输(send和recv).首

六、网络编程(socket编程)

一.客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网处处是C/S架构 比如百度网站是服务端,浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端提供微信服务,需要下载微信安装包安装使用才可以去聊微信. C/S架构与socket的关系: 用socket就是为了完成C/S架构的开发 server端(必须遵守的): 1.位置必须固定死,绑定一个固定的地址 2.对外一直提供服务,稳定运行 3.支持并发(让多个客户端感觉是同时被服务着) 二.OSI七层 1.引子 须

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

iOS网络编程笔记——Socket编程

一.什么是Socket通信: Socket是网络上的两个程序,通过一个双向的通信连接,实现数据的交换.这个双向连路的一端称为socket.socket通常用来实现客户方和服务方的连接.socket是TCP/IP协议的一个十分流行的编程接口.一个socket由一个IP地址和一个端口号唯一确定.TCP/IP协议的传输层又有两种协议:TCP(传输控制协议)和UDP(用户数据报协议).TCP是基于连接的,而UDP是无连接的:TCP对系统资源的要求较多,而UDP少:TCP保证数据的正确性而UDP可能丢包:

python网络编程之socket编程

一 客户端/服务器架构 即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 美好的愿望: 最常用的软件服务器是 Web 服务器.一台机器里放一些网页或 Web 应用程序,然后启动 服务.这样的服务器的任务就是接受客户的请求,把网页发给客户(如用户计算机上的浏览器),然 后等待下一个客户请求.这些服务启动后的目标就是"永远运行下去".虽然它们不可能实现这样的 目标,但只要没有关机或硬件出错等外力干扰,它们就能运行非常长的一段时间. 生活中的C/S架构: 商

网络协议 10 - Socket 编程:实践是检验真理的唯一标准

系列文章传送门: 网络协议 1 - 概述 网络协议 2 - IP 是怎么来,又是怎么没的? 网络协议 3 - 从物理层到 MAC 层 网络协议 4 - 交换机与 VLAN:办公室太复杂,我要回学校 网络协议 5 - ICMP 与 ping:投石问路的侦察兵 网络协议 6 - 路由协议:敢问路在何方? 网络协议 7 - UDP 协议:性善碰到城会玩 网络协议 8 - TCP 协议(上):性恶就要套路深 网络协议 9 - TCP协议(下):聪明反被聪明误 ????前面一直在说各种协议,偏理论方面的知