没有合适的资源?快使用搜索试试~ 我知道了~
首页C++ Socket编程入门与简单服务器示例
C++ Socket编程入门与简单服务器示例
4星 · 超过85%的资源 需积分: 50 3 下载量 70 浏览量
更新于2024-07-27
收藏 187KB PDF 举报
"C++ Socket网络编程大全是一份详尽的教程,主要介绍了在Windows环境下使用C++进行网络编程的基础知识,特别是通过Winsock API进行套接字编程。本文档的核心内容围绕一个简单的服务器实现展开,它使用了`winsock2.h`库,并链接了`WS2_32.lib`。作者首先定义了一个全局变量`WSADATA wsd`,用于初始化Winsock库,然后设置了一个静态的端口`static UINT port = %%1`,这可能是根据命令行参数动态设定的。 在`listen()`函数中,作者首先检查WSAStartup()函数的返回值,如果初始化失败则返回错误。接着,创建一个SOCK_STREAM类型的套接字`sServer`,并将其绑定到指定的IP地址(INADDR_ANY,表示任意地址)和端口。如果这个过程中的任何步骤失败,都会关闭套接字并清理资源。 然后,服务器开始监听连接请求,设置最大连接队列为1,等待客户端连接。当客户端连接时,调用accept()函数接收新连接,将连接信息存储在`sockaddr_in addrClient`结构中。如果accept()失败,同样会关闭`sServer`套接字并清理。 这份教程的重点在于展示如何创建、绑定、监听和管理套接字的基本流程,适合那些初次接触C++网络编程的开发者学习和参考。后续章节可能会深入探讨客户端-服务器架构、数据传输、错误处理、多线程处理等内容,对于想要精通C++网络编程的读者来说,这是一个非常实用的学习资源。"
资源详情
资源推荐
file:///C|/Documents and Settings/ITboy/桌面/新建文件夹 (2)/C++_Socket网络编程大全.txt[2010-4-23 0:29:18]
if(!sockClient.Connect((LPCTSTR)szIP, 800))
{
AfxMessageBox("连接到对方机器失败!");
return;
}
SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024);
UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw);
dwRead+=dw;
}
SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
9.发送邮件
/*
#import <cdonts.dll>
#include "tchar.h"
#include "stdio.h"
*/
CoInitialize(NULL);
try
{
CDONTS::INewMailPtr spNewMail(__uuidof(CDONTS::NewMail));
spNewMail->From = _T("YourName");
spNewMail->To = _T("zxgdata@21cn.com");
spNewMail->Subject = _T("Testing");
spNewMail->Body = _T("Put your message here");
spNewMail-
>AttachFile(_variant_t(_bstr_t("C:\\tmp\\test\\mail\\mail.cpp")),_variant_t((long)DISP_E_PARAMNOTFOUND
, VT_ERROR),_variant_t((long)DISP_E_PARAMNOTFOUND, VT_ERROR));
spNewMail->Send();
printf("send ok");
}
catch(_com_error &ComError)
{
printf("%s\n",ComError.Description());
}
CoUninitialize();
file:///C|/Documents and Settings/ITboy/桌面/新建文件夹 (2)/C++_Socket网络编程大全.txt[2010-4-23 0:29:18]
10.接收邮件
利用JMail组件快速构建邮件程序
http://www.vckbase.com/document/viewdoc/?id=684
http://www.vckbase.com/document/viewdoc/?id=712
11.多线程阻塞通信
12.多线程非阻塞通信
13.多线程文件断点续传
//Send.dsw
//Thead.h
// 线程对象封装
//
#ifndef _THREAD_INCLUDE_
#define _THREAD_INCLUDE_
class CThread
{
private:
static DWORD WINAPI ThreadProc(LPVOID pVoid);
protected:
BOOL m_bTerminated; // 线程是否终止的标志
virtual void Execute(void) = 0;
public:
HANDLE m_hThread; // 线程句柄
CThread(void);
~CThread(void);
void Resume(void);
void Terminate(void);
HANDLE GetThreadHandle(void);
};
#endif // #ifndef _THREAD_INCLUDE_
//Thead.cpp
// 线程对象封装
//
#include "stdafx.h"
#include "Thread.h"
CThread::CThread(void)
{
m_bTerminated = FALSE;
DWORD dwThreadID;
m_hThread = CreateThread(NULL, 0, ThreadProc, this, CREATE_SUSPENDED, &dwThreadID);
}
CThread::~CThread(void)
{
CloseHandle(m_hThread);
剩余46页未读,继续阅读
kandyer
- 粉丝: 39
- 资源: 42
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AirKiss技术详解:无线传递信息与智能家居连接
- Hibernate主键生成策略详解
- 操作系统实验:位示图法管理磁盘空闲空间
- JSON详解:数据交换的主流格式
- Win7安装Ubuntu双系统详细指南
- FPGA内部结构与工作原理探索
- 信用评分模型解析:WOE、IV与ROC
- 使用LVS+Keepalived构建高可用负载均衡集群
- 微信小程序驱动餐饮与服装业创新转型:便捷管理与低成本优势
- 机器学习入门指南:从基础到进阶
- 解决Win7 IIS配置错误500.22与0x80070032
- SQL-DFS:优化HDFS小文件存储的解决方案
- Hadoop、Hbase、Spark环境部署与主机配置详解
- Kisso:加密会话Cookie实现的单点登录SSO
- OpenCV读取与拼接多幅图像教程
- QT实战:轻松生成与解析JSON数据
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功