Win Socket编程原理及简单实例

简介: [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html  使用Linux Socket做了小型的分布式,如Linux C Socket编程原理及简单实例。

[转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 

使用Linux Socket做了小型的分布式,如Linux C Socket编程原理及简单实例

为了更好地分布也得看看Win Socket。

Win Socket TCP原理图:

Win Socket UDP原理图:

 

 简单TCP连接实例:

服务器端:

 1 #include <WINSOCK2.H>
 2 #include <stdio.h>
 3 #pragma comment(lib,"ws2_32.lib")
 4 int main(int argc,char **argv)
 5 {
 6     ///创建套接字
 7     WORD myVersionRequest;
 8     WSADATA wsaData;
 9     myVersionRequest=MAKEWORD(1,1);
10     int err;
11     err=WSAStartup(myVersionRequest,&wsaData);
12     if (!err){
13         printf("已打开套接字\n");
14     }else{
15         printf("ERROR:嵌套字未打开!");
16         return 1;
17     }
18 
19     ///进一步绑定套接字
20     SOCKET serSocket=socket(AF_INET,SOCK_STREAM,0);//创建了可识别套接字
21 
22     ///需要绑定的参数
23     SOCKADDR_IN addr;
24     addr.sin_family=AF_INET;
25     addr.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//ip地址
26     addr.sin_port=htons(6000);//绑定端口
27 
28     bind(serSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));//绑定完成
29     listen(serSocket,5);//其中第二个参数代表能够接收的最多的连接数
30 
31     //////////////////////////////////////////////////////////////////////////
32     //开始进行监听
33     //////////////////////////////////////////////////////////////////////////
34     SOCKADDR_IN clientsocket;
35     int len=sizeof(SOCKADDR);
36     while (1)
37     {
38         SOCKET serConn=accept(serSocket,(SOCKADDR*)&clientsocket,&len);//如果这里不是accept而是conection的话。。就会不断的监听
39         char sendBuf[100];
40 
41         sprintf(sendBuf,"hello, %s !",inet_ntoa(clientsocket.sin_addr));//找对对应的IP并且将这行字打印到那里
42         printf("Send:%s\n",sendBuf);
43         send(serConn,sendBuf,strlen(sendBuf)+1,0);
44 
45         char receiveBuf[100];//接收
46         recv(serConn,receiveBuf,sizeof(receiveBuf),0);
47         printf("recv:%s\n",receiveBuf);
48 
49         closesocket(serConn);//关闭
50         WSACleanup();//释放资源的操作
51         return 0;
52     }
53     return 1;
54 }
View Code

客户端:

 1 #include <WINSOCK2.H>
 2 #include <stdio.h>
 3 #pragma comment(lib,"ws2_32.lib")
 4 int main(int argc,char **argv)
 5 {
 6     int err;
 7     WORD versionRequired;
 8     WSADATA wsaData;
 9     versionRequired=MAKEWORD(1,1);
10     err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息
11     if (!err)    {
12         printf("客户端嵌套字已经打开!\n");
13     }else{
14         printf("ERROR:客户端的嵌套字打开失败!\n");
15         return 1;//结束
16     }
17     SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0);
18 
19     SOCKADDR_IN clientsock_in;
20     clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
21     clientsock_in.sin_family=AF_INET;
22     clientsock_in.sin_port=htons(6000);
23 
24     connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接
25     char receiveBuf[100];
26     if(true){
27 
28         printf("Send:%s\n","hello,this is client");
29         send(clientSocket,"hello,this is client",strlen("hello,this is client")+1,0);
30 
31         recv(clientSocket,receiveBuf,101,0);
32         printf("Recv:%s\n",receiveBuf);
33 
34         closesocket(clientSocket);
35         WSACleanup();
36     }
37     return 0;
38 }
View Code

 执行如下:

服务器端:

客户端:

相关文章
|
15天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
15天前
|
程序员 开发者 Python
Python网络编程基础(Socket编程) 错误处理和异常处理的最佳实践
【4月更文挑战第11天】在网络编程中,错误处理和异常管理不仅是为了程序的健壮性,也是为了提供清晰的用户反馈以及优雅的故障恢复。在前面的章节中,我们讨论了如何使用`try-except`语句来处理网络错误。现在,我们将深入探讨错误处理和异常处理的最佳实践。
|
19天前
|
网络协议 程序员 Python
pythonTCP客户端编程创建Socket对象
【4月更文挑战第6天】本教程介绍了TCP客户端如何创建Socket对象。Socket作为网络通信的基础单元,包含协议、IP地址和端口等信息。在TCP/IP中,Socket分为流式(TCP)、数据报(UDP)和原始套接字。以Python为例,创建TCP Socket对象需调用`socket.socket(AF_INET, SOCK_STREAM)`。为确保健壮性,应使用异常处理处理可能的`socket.error`。学习本教程将帮助你掌握TCP客户端创建Socket对象的技能。
|
1月前
|
网络协议 安全 API
计算机网络之Socket编程
计算机网络之Socket编程
|
2月前
|
网络协议 安全 开发者
Python 中的 Socket 编程
Python 中的 Socket 编程
44 4
|
3月前
|
API C++
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(1)
前言   本文旨在学习socket网络编程这一块的内容,epoll是重中之重,后续文章写reactor模型是建立在epoll之上的。
34 0
|
3月前
|
监控 安全 Linux
socket编程之常用api介绍与socket、select、poll、epoll高并发服务器模型代码实现(3)
高并发服务器模型-poll poll介绍   poll跟select类似, 监控多路IO, 但poll不能跨平台。其实poll就是把select三个文件描述符集合变成一个集合了。
36 0
|
2天前
|
存储 网络协议 关系型数据库
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
Python从入门到精通:2.3.2数据库操作与网络编程——学习socket编程,实现简单的TCP/UDP通信
|
14天前
|
网络协议 Java API
Python网络编程基础(Socket编程)Twisted框架简介
【4月更文挑战第12天】在网络编程的实践中,除了使用基本的Socket API之外,还有许多高级的网络编程库可以帮助我们更高效地构建复杂和健壮的网络应用。这些库通常提供了异步IO、事件驱动、协议实现等高级功能,使得开发者能够专注于业务逻辑的实现,而不用过多关注底层的网络细节。
|
18天前
|
Python
Python网络编程基础(Socket编程)UDP服务器编程
【4月更文挑战第8天】Python UDP服务器编程使用socket库创建UDP套接字,绑定到特定地址(如localhost:8000),通过`recvfrom`接收客户端数据报,显示数据长度、地址和内容。无连接的UDP协议使得服务器无法主动发送数据,通常需应用层实现请求-响应机制。当完成时,用`close`关闭套接字。