C++ socket程序
下面是一个C++调用windows API实现有通信程序,您可以据此进行修改,封装成类.
// *******************************************************************
// client.cpp : Defines the entry point for the console application.
// *******************************************************************
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#define PORT_SERVER 6656
int main(int argc, char* argv[])
{
std::cout << "Start up tcp client." << std::endl;
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 0);
if (0 != WSAStartup(sockVersion, &wsaData))
{
std::cout << "Failed to retrive socket version."
<< std::endl;
return 0;
}
SOCKET sock_client;
sock_client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sock_client)
{
std::cout << "Invalid socket." << std::endl;
WSACleanup();
return 0;
}
sockaddr_in addr_sev;
addr_sev.sin_family = AF_INET;
addr_sev.sin_port = htons(PORT_SERVER);
addr_sev.sin_addr.s_addr = inet_addr("127.0.0.1");
if (SOCKET_ERROR == connect(sock_client, (sockaddr *)&addr_sev, sizeof(addr_sev)))
{
std::cout << "Failed to connect." << std::endl;
WSACleanup();
return 0;
}
char buf[512];
int recv_size = 0;
recv_size = recv(sock_client, buf, 512, 0);
if (512 > recv_size)
{
buf[recv_size] = '\0';
std::cout << "receive data is :" << buf << std::endl;
memset(buf, 0, sizeof(buf));
}
else
{
std::cout << "receive data is overflow" << std::endl;
}
closesocket(sock_client);
WSACleanup();
system("PAUSE");
return 0;
}
// *******************************************************************
// server.cpp : Defines the entry point for the console application.
// *******************************************************************
#include "stdafx.h"
#include <winsock2.h>
#include <iostream>
#define PORT_SERVER 6656
#define NUM_CLIENTS 10
int main(int argc, char* argv[])
{
std::cout << "Start up tcp server." << std::endl;
WSADATA wsaData;
WORD sockVersion = MAKEWORD(2, 0);
if (0 != WSAStartup(sockVersion, &wsaData))
{
std::cout << "Failed to retrive socket version."
<< std::endl;
return 0;
}
SOCKET sock_sev;
sock_sev = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sock_sev)
{
std::cout << "Invalid socket." << std::endl;
WSACleanup();
return 0;
}
sockaddr_in addr_sev;
addr_sev.sin_family = AF_INET;
addr_sev.sin_port = htons(PORT_SERVER);
addr_sev.sin_addr.s_addr = INADDR_ANY;
if (SOCKET_ERROR == bind(sock_sev, (sockaddr *)&addr_sev, sizeof(addr_sev)))
{
std::cout << "Failed to bind." << std::endl;
WSACleanup();
return 0;
}
if (SOCKET_ERROR == listen(sock_sev, NUM_CLIENTS))
{
std::cout << "Failed to listen." << std::endl;
WSACleanup();
return 0;
}
// 多路复用,暂时还未实现.后期会对此给出示例.
//fd_set reads;
//fd_set writes;
//fd_set accepts;
//FD_ZERO(&reads);
//FD_ZERO(&writes);
//FD_ZERO(&accepts);
//SOCKET sock_client;
sockaddr_in addr_client;
int nAddrLen = sizeof(addr_client);
while (true)
{
char tmp[512];
sock_client = accept(sock_sev, (sockaddr *)&addr_client, &nAddrLen);
if (INVALID_SOCKET == sock_client)
{
std::cout << "Failed to accept." << std::endl;
continue;
}
sprintf(tmp, "Your IP is %s\n", inet_ntoa(addr_client.sin_addr));
send(sock_client, tmp, strlen(tmp), 0);
std::cout << "Connection from " << inet_ntoa(addr_client.sin_addr)
<< std::endl;
closesocket(sock_client);
}
return 0;
}
注:本程序使用的是VC6 IDE,编译时请在link中加入对ws2_32.lib库的引用.
分享到:
相关推荐
C++ Socket通信库是用于实现网络通信的一种工具,它基于操作系统提供的Socket接口,为开发者提供了一种在C++程序中进行网络数据交换的标准方法。Socket库简化了网络编程,允许程序员通过调用特定的API函数来创建、...
在QT框架中,C++ Socket通信是实现网络数据交换的基础,它允许客户端和服务端通过网络进行数据传输。本文将深入探讨如何在QT中使用C++编写客户端和服务端的socket通信代码,以及涉及到的关键操作。 首先,我们需要...
在Linux环境下,C++实现基于Socket的文件传输是一项常见的任务,尤其在分布式系统、网络编程以及服务器开发中。Socket是网络通信的一种接口,它允许进程间通过网络进行数据交换。本篇文章将深入探讨如何利用C++在...
在C++中,Socket编程是网络通信的基础,用于创建客户端和服务器端的连接。本话题主要探讨的是在C++ Socket编程中的阻塞模式与非阻塞模式,以及它们在多线程环境下的应用和资源管理。 一、阻塞与非阻塞模式 1. **...
在Windows平台上,使用C++实现Socket通信通常涉及到Windows Socket API(也称为Winsock)。本框架“HP-Socket”专为Windows环境设计,提供了丰富的功能和易用的接口,使得开发者能够快速构建网络应用。 1. **Socket...
telnet 客户端的c++实现,socket模拟实现telnet 的远程连接。以及telnet 的模拟其他指令发送 接收。
C++ Socket 编程是指使用 C++ 语言和_socket 编程技术来实现网络应用的开发。Socket 编程是网络编程中的一种重要技术,它允许不同的计算机之间通过网络进行通信。 OSI 七层网络模型 OSI 七层网络模型是一个开放式...
以上就是C++ Socket实现客户端和服务端连接的基本步骤。在实际应用中,还需要考虑错误处理、多线程、异步通信等高级特性。通过提供的压缩包文件"socket 连接",你可以找到具体的代码示例,进一步学习和实践这些概念...
C++开发基于TCPsocket实现的web服务器源码。基于TCP socket实现的支持报文解析并返回响应报文的Web服务器,可以响应多种文件需求并能够处理特定的错误情况 服务器实现及其功能: 1、读取配置文件,为服务器自身设置...
C++作为一门强大的编程语言,可以很好地实现Socket接口,构建服务器和客户端应用。在这个项目中,我们将探讨如何使用C++在Visual Studio 2008环境下实现Socket服务器和客户端的基本功能。 首先,Socket在C++中主要...
封装后的C++类隐藏了底层复杂性,通过简单的方法调用就可以实现复杂的Socket操作。 在实际应用中,可以通过简单的C语言Socket程序来理解基础的Socket通信流程。在此基础上,利用C++对一些重复的、固定的操作进行...
C++ Socket库提供了一种在C++中实现网络编程的方法,允许程序通过Internet或本地网络发送和接收数据。Socket是操作系统提供的接口,它允许应用程序访问网络协议,如TCP/IP。本文档将深入探讨C++ Socket库的关键概念...
在IT行业中,网络编程是构建分布式系统和网络应用的基础,而C++ Socket编程则是实现这一目标的重要工具。Socket是操作系统提供的接口,允许程序通过网络进行通信。本实例提供了C++实现的服务端(server.cpp)和客户端...
在IT领域,网络通信是不可或缺的一部分,而C++作为强大的编程语言,提供了丰富的库支持进行网络...压缩包中的"**C++Socket编程**"文件可能包含了详细的代码示例和步骤解析,对于学习和理解C++ socket编程非常有帮助。
源代码通常是程序员用C++编写的程序或库,用于实现特定功能,例如在这个案例中,是Socket通信。以下是对C++ Socket源代码的一些详细知识点: 1. **套接字基础**:在C++中,Socket编程主要基于Berkeley Sockets API...
开源的Socket库,如C++实现的Sockets-2.3.5,为开发者提供了强大的工具,以实现跨平台的通信功能。本文将深入探讨C++ Socket编程的核心概念、特性以及如何在Win32和Linux环境下进行应用。 首先,理解Socket的基本...
在C++中,我们可以使用套接字(socket)API来实现TCP通信。套接字API提供了一种编程接口,使得应用程序能够发送和接收数据。 接下来,HTTP(Hypertext Transfer Protocol)是互联网上应用最广泛的一种网络协议,...
在IT领域,网络编程是不可或缺的一部分,而C++ Socket编程是实现TCP通信的重要技术。本示例中的"TCP Demo"提供了C++实现TCP客户端和服务器的简单应用,通过socketserver.cpp和socketclient.cpp两个文件来展示。下面...
标题 "c++实现socket:一个服务器对应多个客户端相互传递信息" 指的是利用C++的socket API创建一个服务器程序,该服务器可以同时处理来自多个客户端的连接请求,并允许这些客户端之间交换数据。这种设计模式通常称为...
### C++ Socket编程:向固定网卡发送数据 #### 知识点概览 本文将基于给定的代码示例,深入探讨C++中的Socket编程技术,并解释如何使用Socket进行客户端编程来向指定的IP地址发送数据。我们将涵盖以下几个方面: - ...