在visual c++里建两个win32控制台工程,分别编译下面的服务端和客户端

服务端:

[cpp] view plaincopyprint?
  1. #include <windows.h>
  2. #include <iostream.h>
  3. #include <winsock.h>
  4. #pragma comment(lib,"ws2_32.lib")
  5. #define NO_FLAGS_SET 0
  6. #define PORT (u_short)44965
  7. #define MAXBUFLEN 256
  8. //服务器 -- VC++ Socket编程 简单的Tcp/ip服务器
  9. int main()
  10. {
  11. WSADATA Data;
  12. SOCKADDR_IN serverSockAddr;
  13. SOCKADDR_IN clientSockAddr;
  14. SOCKET serverSocket;
  15. SOCKET clientSocket;
  16. int addrLen=sizeof(SOCKADDR_IN);
  17. int status;
  18. int numrcv;
  19. char buffer[MAXBUFLEN];
  20. /* initialize the Windows Socket DLL */
  21. status=WSAStartup(MAKEWORD(1, 1), &Data);
  22. if (status != 0)
  23. cerr << "ERROR: WSAStartup unsuccessful" << endl;
  24. /* zero the sockaddr_in structure */
  25. memset(&serverSockAddr, 0, sizeof(serverSockAddr));
  26. /* specify the port portion of the address */
  27. serverSockAddr.sin_port=htons(PORT);
  28. /* specify the address family as Internet */
  29. serverSockAddr.sin_family=AF_INET;
  30. /* specify that the address does not matter */
  31. serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY);
  32. /* create a socket socket(通信发生的区域,套接字的类型,套接字使用的特定协议) */
  33. serverSocket = socket(AF_INET, SOCK_STREAM, 0);
  34. if (serverSocket == INVALID_SOCKET)
  35. cerr << "ERROR: socket unsuccessful" << endl;
  36. /* associate the socket with the address */
  37. status=bind(serverSocket, (LPSOCKADDR)&serverSockAddr, sizeof(serverSockAddr));
  38. if (status == SOCKET_ERROR)
  39. cerr << "ERROR: bind unsuccessful" << endl;
  40. /* allow the socket to take connections listen(已建立、尚未连接的套接字号,连接队列的最大长度) */
  41. status=listen(serverSocket, 1);
  42. if (status == SOCKET_ERROR)
  43. cerr << "ERROR: listen unsuccessful" << endl;
  44. /* accept the connection request when one is received */
  45. clientSocket=accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen);
  46. cout << "Got the connection..." << endl;
  47. while(1)
  48. {
  49. /* recv(已连接的套接字, 接收输入数据缓冲区的指针, 缓冲区大小, 传输控制方式) */
  50. numrcv=recv(clientSocket, buffer, MAXBUFLEN, NO_FLAGS_SET);
  51. if ((numrcv == 0) || (numrcv == SOCKET_ERROR))
  52. {
  53. cout << "Connection terminated." << endl;
  54. status=closesocket(clientSocket);
  55. if (status == SOCKET_ERROR)
  56. cerr << "ERROR: closesocket unsuccessful" << endl;
  57. status=WSACleanup();
  58. if (status == SOCKET_ERROR)
  59. cerr << "ERROR: WSACleanup unsuccessful" << endl;
  60. return(1);
  61. }
  62. cout << buffer << endl;
  63. } /* while */
  64. }

#include <windows.h>
#include <iostream.h>
#include <winsock.h>
#pragma comment(lib,"ws2_32.lib")#define NO_FLAGS_SET 0
#define PORT (u_short)44965
#define MAXBUFLEN 256//服务器 -- VC++ Socket编程 简单的Tcp/ip服务器
int main()
{
WSADATA Data;
SOCKADDR_IN serverSockAddr;
SOCKADDR_IN clientSockAddr;
SOCKET serverSocket;
SOCKET clientSocket;
int addrLen=sizeof(SOCKADDR_IN);
int status;
int numrcv;
char buffer[MAXBUFLEN];/* initialize the Windows Socket DLL */
status=WSAStartup(MAKEWORD(1, 1), &Data);
if (status != 0)cerr << "ERROR: WSAStartup unsuccessful" << endl;/* zero the sockaddr_in structure */
memset(&serverSockAddr, 0, sizeof(serverSockAddr));/* specify the port portion of the address */
serverSockAddr.sin_port=htons(PORT);
/* specify the address family as Internet */
serverSockAddr.sin_family=AF_INET;
/* specify that the address does not matter */
serverSockAddr.sin_addr.s_addr=htonl(INADDR_ANY);/* create a socket socket(通信发生的区域,套接字的类型,套接字使用的特定协议) */
serverSocket = socket(AF_INET, SOCK_STREAM, 0);
if (serverSocket == INVALID_SOCKET)cerr << "ERROR: socket unsuccessful" << endl;/* associate the socket with the address */
status=bind(serverSocket, (LPSOCKADDR)&serverSockAddr, sizeof(serverSockAddr));
if (status == SOCKET_ERROR)cerr << "ERROR: bind unsuccessful" << endl;/* allow the socket to take connections listen(已建立、尚未连接的套接字号,连接队列的最大长度) */
status=listen(serverSocket, 1);
if (status == SOCKET_ERROR)cerr << "ERROR: listen unsuccessful" << endl;/* accept the connection request when one is received */
clientSocket=accept(serverSocket, (LPSOCKADDR)&clientSockAddr, &addrLen);cout << "Got the connection..." << endl;while(1)
{/* recv(已连接的套接字, 接收输入数据缓冲区的指针, 缓冲区大小, 传输控制方式) */numrcv=recv(clientSocket, buffer, MAXBUFLEN, NO_FLAGS_SET);if ((numrcv == 0) || (numrcv == SOCKET_ERROR)){cout << "Connection terminated." << endl;status=closesocket(clientSocket);if (status == SOCKET_ERROR)cerr << "ERROR: closesocket unsuccessful" << endl;status=WSACleanup();if (status == SOCKET_ERROR)cerr << "ERROR: WSACleanup unsuccessful" << endl;return(1);}cout << buffer << endl;
} /* while */
}

====================================================================================================

客户端:

[cpp] view plaincopyprint?
  1. #include <windows.h>
  2. #include <winsock.h>
  3. #include <iostream.h>
  4. #pragma comment(lib,"ws2_32.lib")
  5. #define NO_FLAGS_SET 0
  6. #define PORT (u_short)44965
  7. #define DEST_IP_ADDR "192.168.0.7" //Server address
  8. //客户端 --VC++ Socket编程 简单的Tcp/ip客户端
  9. int main()
  10. {
  11. WSADATA Data;
  12. SOCKADDR_IN destSockAddr;
  13. SOCKET destSocket;
  14. unsigned long destAddr;
  15. int status;
  16. int numsnt;
  17. char *toSendtxt="Test String";
  18. /* initialize the Windows Socket DLL */
  19. status=WSAStartup(MAKEWORD(1, 1), &Data);
  20. if (status != 0)
  21. cerr << "ERROR: WSAStartup unsuccessful" << endl;
  22. /* convert IP address into in_addr form */
  23. destAddr=inet_addr(DEST_IP_ADDR);
  24. /* copy destAddr into sockaddr_in structure */
  25. memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr));
  26. /* specify the port portion of the address */
  27. destSockAddr.sin_port=htons(PORT);
  28. /* specify the address family as Internet */
  29. destSockAddr.sin_family=AF_INET;
  30. /* create a socket */
  31. destSocket=socket(AF_INET, SOCK_STREAM, 0);
  32. if (destSocket == INVALID_SOCKET)
  33. {
  34. cerr << "ERROR: socket unsuccessful" << endl;
  35. status=WSACleanup();
  36. if (status == SOCKET_ERROR)
  37. cerr << "ERROR: WSACleanup unsuccessful" << endl;
  38. return(1);
  39. }
  40. cout << "Trying to connect to IP Address: " << DEST_IP_ADDR << endl;
  41. /* connect to the server */
  42. status=connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof(destSockAddr));
  43. if (status == SOCKET_ERROR)
  44. {
  45. cerr << "ERROR: connect unsuccessful" << endl;
  46. status=closesocket(destSocket);
  47. if (status == SOCKET_ERROR)
  48. cerr << "ERROR: closesocket unsuccessful"
  49. << endl;
  50. status=WSACleanup();
  51. if (status == SOCKET_ERROR)
  52. cerr << "ERROR: WSACleanup unsuccessful"
  53. << endl;
  54. return(1);
  55. }
  56. cout << "Connected..." << endl;
  57. while(1)
  58. {
  59. cout << "Sending..." << endl;
  60. numsnt=send(destSocket, toSendtxt, strlen(toSendtxt) + 1, NO_FLAGS_SET);
  61. if (numsnt != (int)strlen(toSendtxt) + 1)
  62. {
  63. cout << "Connection terminated" << endl;
  64. status=closesocket(destSocket);
  65. if (status == SOCKET_ERROR)
  66. cerr << "ERROR: closesocket unsuccessful" << endl;
  67. status=WSACleanup();
  68. if (status == SOCKET_ERROR)
  69. cerr << "ERROR: WSACleanup unsuccessful" << endl;
  70. return(1);
  71. }
  72. /* Wait before sending the message again */
  73. Sleep(1000);
  74. } /* while */
  75. }

win32 socket的一个简单的例子 控制台相关推荐

  1. blockchain 区块链200行代码:在JavaScript实现的一个简单的例子

    blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...

  2. pycharm安装scrapy失败_Scrapy ——环境搭配与一个简单的例子

    在我刚接触爬虫的时候就已经听过Scrapy大名了,据说是一个很厉害的爬虫框架,不过那个时候沉迷于Java爬虫.现在终于要来揭开它神秘的面纱了,来一起学习一下吧 欢迎关注公众号:老白和他的爬虫 1.环境 ...

  3. antlr4例子_ANTLR和网络:一个简单的例子

    antlr4例子 网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序. 因此,我非常习惯在自己的机器上安装工具. 但是在2016年,网络无处不在,因此那里也可能需要我们的语言. 可 ...

  4. ANTLR和网络:一个简单的例子

    网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序. 因此,我非常习惯在计算机上安装工具. 但是在2016年,网络无处不在,因此那里也可能需要我们的语言. 可能的情况: ANTLR ...

  5. 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击

    跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...

  6. React.js 小书 Lesson1-2 - 前端组件化(一):从一个简单的例子讲起

    React.js 小书 Lesson1-2 - 前端组件化(一):从一个简单的例子讲起 本文作者:胡子大哈 本文原文:http://huziketang.com/books/react/lesson2 ...

  7. .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子

    1. 为什么需要序列化,什么是序列化 对于一个程序来说, 使用到的对象都是存在于内存中的.如果想保存这些对象的运行时状态, 或者需要在不同进程或者网络间传递对象,就需要序列化. 序列化就是讲运行中的对 ...

  8. 一个简单的例子看java线程机制

    一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...

  9. java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...

    一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...

最新文章

  1. ios(iphone/ipad)开发笔记(1)
  2. 激活当前视图菜单高亮呈现 V2.0
  3. 微生物组数据库: 一站式环境基因组学数据云平台更新啦!
  4. 操作系统期末考试重点
  5. 配置Bean的作用域对象
  6. 数据装载全/存量直接装载到目标表_09
  7. 新手安装Ubuntu操作系统
  8. java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
  9. 拜托,面试别再问我基数排序了!!!
  10. MybatisPlus学习笔记
  11. 什么是android原生系统版本,定制安卓和原生Android到底有哪些不同之处?彻底真相了...
  12. 如何使用CodeSmith批量生成代码(原创系列教程)
  13. 高等代数 多项式环(第7章)5* 结式与域
  14. 完整缓和曲线和非完整缓和曲线交点法坐标计算应用
  15. 计算机硬件未来发展前景,计算机硬件现状及其发展趋势
  16. MT8377 MT8389 MT6589 MT6577解析
  17. 推荐王森的关于j2me开发的2本书!
  18. 阿里邮箱备份,引发的小小插曲--2018年6月21日
  19. android 微信高仿,Android高仿微信聊天界面代码分享
  20. Java面试:java小项目实例

热门文章

  1. android 选座,机票在线选座 Android 开源库
  2. html清除溢出,深入理解CSS overflow:hidden——溢出,坍塌,清除浮动
  3. 自定义linux命令工具栏,如何自定义Mac终端并使其更有用!
  4. php注册界面模板,WeUI注册页面
  5. 网信号好怎么不显示无服务器,苹果iPhone12经常出现无服务状态 信号不好怎么解决...
  6. windows获取硬件设备的guid_Windows编程技术:提权技术(下)
  7. 学好单片机必须要了解的的8个电路设计
  8. 国一B题方案解析:轴距仅210mm的四旋翼有多稳?
  9. java object.getclass_Java Object getClass() 方法
  10. 命令执行漏洞-命令执行-漏洞位点- 代码注入-漏洞利用-联合执行-Bypass(空格,关键字过滤,变量绕过)-例题两道-actf2020exec-GXYCTF2019 Ping Ping Ping