#include "stdafx.h"
#include "WINSOCK2.H" #pragma comment(lib,"WS2_32.lib")
#define BUF_SIZE 64 //缓冲区大小
int _tmain(int argc, _TCHAR* argv[])
{
WSADATA wsd;//存储WSAStartup返回的数据windows socket数据。
SOCKET server; //服务器套接字
SOCKET client; //客户端套接字
int retVal;
char buf[BUF_SIZE]; //初始化动态库套接字
//WSAStartup Winsock初始化
ZeroMemory(buf, BUF_SIZE);
if (WSAStartup(MAKEWORD(, ), &wsd) != )
{
printf("WSAStartup failed 1/n");
return ;
} //创建套接字
//AF_INET IPV4套接字类型
//AF_INET6 IPV6套接字类型
//AF_UNIX Unix套接字类型
//SOCK_STREAM TCP协议
//SOCK_DGRAM UDP协议
//SOCK_RAW 特殊的IPV4,可以处理ICMP、IGMP等网络报文
//INVALID_SOCKET socket创建失败
server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == server)
{
printf("socket failed !/n");
WSACleanup();
return -;
} //服务器套接地址
//sin_family 协议簇
//sin_addr 地址
//htonl()--"Host to Network Long"
//ntohl()--"Network to Host Long"
//htons()--"Host to Network Short"
//ntohs()--"Network to Host Short"
//INADDR_ANY inet_addr("0.0.0.0")监听所有网络
//SOCKADDR_IN SOCKADDR 网络地址
SOCKADDR_IN addserver;
addserver.sin_family = AF_INET;
addserver.sin_port = htons();
addserver.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //绑定套接字
retVal = bind(server, (const struct sockaddr*)&addserver, sizeof(SOCKADDR_IN));
if (SOCKET_ERROR == retVal)
{
printf("bind failed !/n");
closesocket(server);
WSACleanup();
return false;
} //监听套接字
retVal = listen(server, );
if (SOCKET_ERROR == retVal)
{
printf("listen failed!/n");
closesocket(server);
WSACleanup();
return false;
} //接受客户端数据
//accept 建立链接 返回一个SOCKET类型的值,表示接收到的套接字的描述符,否则返回INVALID_SOCKET _In_ SOCKET s,
sockaddr_in addrClient;
int addrClintlen = sizeof(addrClient);
client = accept(server, (sockaddr FAR*)&addrClient, &addrClintlen);
{
printf("accept failed !/n");
closesocket(server);
WSACleanup();
return -;
} //接收客户端套接字
retVal = recv(client, buf, BUF_SIZE, );
if (SOCKET_ERROR == retVal)
{
printf("recv failed !/n");
closesocket(server);
closesocket(client);
WSACleanup();
return false;
} //退出程序
printf("Recv From Client:%s/n", buf);
retVal = send(client, "Hello Word!", strlen("Hello word!"), );
if (SOCKET_ERROR == retVal)
{
printf("send failed !/n");
closesocket(server);
closesocket(client);
WSACleanup();
return false;
}
closesocket(server);
closesocket(client);
WSACleanup();
return ;
}

最新文章

  1. iOS开发系列--App扩展开发
  2. iOS学习之iOS沙盒(sandbox)机制和文件操作之NSFileManager(三)
  3. 【BZOJ-4668】冷战 并查集 + 按秩合并 + 乱搞
  4. logstash安装与基础用法
  5. jqPlot插件绘制柱状图
  6. Objective-C中@encode的使用
  7. Zone.js
  8. [SQLServer]学习总结笔记(基本涵盖Sql的所有操作)
  9. Project Euler 86:Cuboid route 长方体路径
  10. [原]Unity3D深入浅出 - 导航网格自动寻路(Navigation Mesh)
  11. Mysql 索引的基础(上)
  12. 运用Swagger 添加WebAPI 文档
  13. HTML 5 学习 (1)
  14. 喷水装置(一)--nyoj题目6
  15. 左右TS分析流
  16. MPP 一、Greenplum 集群安装
  17. 关于java多态的理解
  18. Linux配置成网关
  19. thick置备和 thin置备,克隆,模板和快照
  20. python 数据交换

热门文章

  1. Qt编译mysql以及创建表后进行导入操作
  2. Spark修炼之道(高级篇)——Spark源代码阅读:第十二节 Spark SQL 处理流程分析
  3. 7-07. PAT排名汇总(25) (结构体 ZJU_PAT)
  4. Centos7 zabbix3.4.6的安装部署 (一)
  5. POJ 1610 Count the Colors
  6. 实现人脸识别性别之路---matplotlib之注释
  7. 紫书 例题 9-8 UVa 1625 (滚动数组+公共字符串处理)
  8. SimpleDateFormat 时间格式化
  9. [React] Validate Custom React Component Props with PropTypes
  10. Intersection between a 2d line and a conic in OpenCASCADE