sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。
服务器端编程的步骤:
1:加载套接字库,创建套接字(WSAStartup()/socket());
2:绑定套接字到一个IP地址和一个端口上(bind());
3:将套接字设置为监听模式等待连接请求(listen());
4:请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept());
5:用返回的套接字和客户端进行通信(send()/recv());
6:返回,等待另一连接请求;
7:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
客户端编程的步骤:
1:加载套接字库,创建套接字(WSAStartup()/socket());
2:向服务器发出连接请求(connect());
3:和服务器端进行通信(send()/recv());
4:关闭套接字,关闭加载的套接字库(closesocket()/WSACleanup())。
第一式: 加载/释放Winsock库:
1.加载方法:
WSADATA wsa;
/*初始化socket资源*/
if (WSAStartup(MAKEWORD(1,1),&wsa) != 0)
{
return; //代表失败
}
2.释放方法:
WSACleanup();
第二式: 构造SOCKET:
1.服务端:构造监听SOCKET,流式SOCKET.
SOCKET Listen_Sock = socket(AF_INET, SOCK_STREAM, 0)
2.客户端:构造通讯SOCKET,流式SOCKET.
SOCKET Client_Sock = socket(AF_INET, SOCK_STREAM, 0)
第三式:配置监听地址和端口:
1.服务端: SOCKADDR_IN serverAddr
ZeroMemory((char *)&serverAddr,sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(1234); /*本地监听端口:1234*/
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY); /*有IP*/
第四式: 绑定SOCKET:
1.服务端:绑定监听SOCKET.
bind(Listen_Sock,(struct sockaddr *)&serverAddr,sizeof(serverAddr))
第五式: 服务端/客户端连接:
1.服务端:等待客户端接入.
SOCKET Command_Sock = accept(Listen_Sock, ...)
2.客户端:请求与服务端连接.
int ret = connect(Client_Sock, ...)
第六式: 收/发数据:
1.服务端:等待客户端接入.char buf[1024].
接收数据:recv(Command_Sock,buf, ...)
或
发送数据:send(Command_Sock,buf, ...)
2.客户端:请求与服务端连接.char buf[1024].
发送数据:send(Client_Sock,buf, ...)
或
接收数据:recv(Client_Sock,buf, ...)
第七式: 关闭SOCKET:
1.服务端:关闭SOCKET.
closesocket(Listen_Sock)
closesocket(Command_Sock)
2.客户端:关闭SOCKET.
closesocket(Client_Sock)
#include <stdio.h> #include <Winsock2.h> void main() { WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD( 1, 1 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) { return; } if ( LOBYTE( wsaData.wVersion ) != 1 || HIBYTE( wsaData.wVersion ) != 1 ) { WSACleanup( ); return; } SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY); addrSrv.sin_family=AF_INET; addrSrv.sin_port=htons(6000); bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR)); listen(sockSrv,5); SOCKADDR_IN addrClient; int len=sizeof(SOCKADDR); while(1) { SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len); char sendBuf[50]; sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr)); send(sockConn,sendBuf,strlen(sendBuf)+1,0); char recvBuf[50]; recv(sockConn,recvBuf,50,0); printf("%s\n",recvBuf); closesocket(sockConn); } }
#include <Winsock2.h>
void main()
{
err = WSAStartup( wVersionRequested, &wsaData );
HIBYTE( wsaData.wVersion ) !=1 )
SOCKADDR_IN addrSrv;
相关推荐
在IT领域,网络通信是不可或缺的一部分,而C++作为强大的编程语言,提供了丰富的库支持进行网络...压缩包中的"**C++Socket编程**"文件可能包含了详细的代码示例和步骤解析,对于学习和理解C++ socket编程非常有帮助。
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而C++ Socket编程则是实现这一目标的重要工具。Socket是操作系统提供的接口,允许程序通过网络进行通信。本实例提供了C++实现的服务端(server.cpp)和客户端...
C++ SOCKET编程是一种在C++中实现网络通信的技术,它基于Berkeley Sockets接口,允许开发者创建客户端和服务器应用程序,实现跨网络的数据传输。SOCKET是操作系统提供的一个接口,使得程序能够通过网络发送和接收...
在C++中,Socket编程主要涉及以下几个步骤: 1. **初始化网络库**:在Windows环境下,通常需要调用`WSAStartup()`函数来启动Winsock DLL。 2. **创建Socket**:使用`socket()`函数创建一个Socket对象。 3. **设置...
《Visual C++ Socket编程》是一本专注于利用Visual C++进行Socket网络编程的教程,其中包含了丰富的源代码供学习者实践。Socket编程是计算机网络通信的基础,尤其在开发跨平台、高性能的网络应用时,它是不可或缺的...
下面我们将详细探讨TCP Socket编程在C++中的应用。 首先,为了进行TCP Socket编程,我们需要包含相应的头文件,如`<sys/socket.h>`,`<netinet/in.h>`和`<arpa/inet.h>`,这些头文件提供了必要的函数和结构体定义。...
本教程将深入探讨如何在Linux环境下进行简单的C++ Socket编程,包括基本概念、步骤以及示例代码。 首先,Socket是网络通信中的一个抽象接口,它允许应用程序通过网络协议(如TCP/IP)进行数据交换。在C++中,我们...
C++ Socket编程是网络通信领域中的重要组成部分,它允许程序通过网络进行数据交换。本教程将深入探讨C++中Socket编程的基本概念、客户端与服务器端的实现以及如何使用提供的简单源码进行学习。 首先,Socket是操作...
本教程将深入探讨如何在Linux环境下使用C++进行Socket编程,通过分析提供的`SocketServer.cpp`和`SocketClient.cpp`两个文件,我们可以学习到C++与Linux Socket API的交互。 首先,让我们了解Socket的基本概念。...
本文将深入探讨如何在Linux环境下利用C++进行Socket编程,包括基本概念、步骤、示例代码以及常见问题。 一、Socket基本概念 Socket,又称为套接字,是网络通信中的端点,它允许两个或多个应用程序通过网络交换数据...
在IT领域,网络编程是构建分布式系统和网络应用的基础,而C++ Socket编程则是实现这一目标的重要技术之一。本文将深入探讨C++ Socket网络编程的相关知识点,帮助开发者理解和掌握其核心概念、步骤以及常见问题。 ...
在Linux系统中,C++与Socket编程的结合是构建网络应用程序的基础。Socket接口提供了一种标准的方法,使得运行在不同主机上的进程可以通过网络进行通信。本文将深入探讨如何在Linux环境下利用C++进行Socket编程。 ...
Socket编程的基本步骤如下: 1. **初始化Winsock**:通过调用`WSAStartup`函数来加载Winsock库,指定所需的库版本并接收关于Winsock的信息。 2. **创建Socket**:使用`socket`函数创建Socket,指定协议族(如AF_...
在C++中,Socket编程是实现网络通信的一种基础方法,主要涉及到网络协议、编程语言、API(如Windows Socket API,简称Winsock)以及图形界面的综合应用。本实例旨在教授如何使用C++来创建、监听、连接、发送数据和...
本文将深入探讨如何使用C++进行Socket编程,特别是在处理结构体消息传递方面。 首先,理解Socket的基本概念是至关重要的。Socket可以看作是网络上的两个进程间通信的一个端点或者连接点,它提供了标准接口来实现...
Socket编程涉及一系列基本的操作步骤,这些步骤通常包括创建Socket、绑定地址、监听连接、接受连接、发送和接收数据以及关闭Socket。下面我们详细介绍这些操作及其对应的函数。 ##### 3.1 socket()函数 `int ...
在C++中,进行Socket编程主要涉及以下步骤: 1. **创建Socket**:首先,我们需要调用`socket()`函数来创建一个Socket实例。这个函数会返回一个Socket描述符,用于后续的所有操作。例如: ```cpp int socket_fd = ...
包含的`sockets.cmap`可能是一个思维导图,展示了各种Socket编程步骤和函数调用关系,而`html`文件可能是详细的API文档或示例代码的HTML版本,可以查看以获取更具体的信息。 9. **跨平台兼容性** C++ Socket库...
在这个专题中,我们将深入探讨C++ Socket编程的基本概念、主要步骤以及TCP和UDP协议的应用。 首先,Socket是操作系统提供的一种通信机制,它相当于网络上的邮局,负责接收和发送数据。在C++中,通过调用socket库...
socket网络编程C++版小实验,有客户端和服务器端的源代码。 socket的英文原义是“孔”或“插座”。作为进程通信机制,取后一种意思。通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄。(其实就是两...