win32 socket的一个简单的例子 控制台
在visual c++里建两个win32控制台工程,分别编译下面的服务端和客户端
服务端:
- #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 */
- }
#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 */
}
====================================================================================================
客户端:
- #include <windows.h>
- #include <winsock.h>
- #include <iostream.h>
- #pragma comment(lib,"ws2_32.lib")
- #define NO_FLAGS_SET 0
- #define PORT (u_short)44965
- #define DEST_IP_ADDR "192.168.0.7" //Server address
- //客户端 --VC++ Socket编程 简单的Tcp/ip客户端
- int main()
- {
- WSADATA Data;
- SOCKADDR_IN destSockAddr;
- SOCKET destSocket;
- unsigned long destAddr;
- int status;
- int numsnt;
- char *toSendtxt="Test String";
- /* initialize the Windows Socket DLL */
- status=WSAStartup(MAKEWORD(1, 1), &Data);
- if (status != 0)
- cerr << "ERROR: WSAStartup unsuccessful" << endl;
- /* convert IP address into in_addr form */
- destAddr=inet_addr(DEST_IP_ADDR);
- /* copy destAddr into sockaddr_in structure */
- memcpy(&destSockAddr.sin_addr, &destAddr, sizeof(destAddr));
- /* specify the port portion of the address */
- destSockAddr.sin_port=htons(PORT);
- /* specify the address family as Internet */
- destSockAddr.sin_family=AF_INET;
- /* create a socket */
- destSocket=socket(AF_INET, SOCK_STREAM, 0);
- if (destSocket == INVALID_SOCKET)
- {
- cerr << "ERROR: socket unsuccessful" << endl;
- status=WSACleanup();
- if (status == SOCKET_ERROR)
- cerr << "ERROR: WSACleanup unsuccessful" << endl;
- return(1);
- }
- cout << "Trying to connect to IP Address: " << DEST_IP_ADDR << endl;
- /* connect to the server */
- status=connect(destSocket, (LPSOCKADDR)&destSockAddr, sizeof(destSockAddr));
- if (status == SOCKET_ERROR)
- {
- cerr << "ERROR: connect unsuccessful" << endl;
- status=closesocket(destSocket);
- if (status == SOCKET_ERROR)
- cerr << "ERROR: closesocket unsuccessful"
- << endl;
- status=WSACleanup();
- if (status == SOCKET_ERROR)
- cerr << "ERROR: WSACleanup unsuccessful"
- << endl;
- return(1);
- }
- cout << "Connected..." << endl;
- while(1)
- {
- cout << "Sending..." << endl;
- numsnt=send(destSocket, toSendtxt, strlen(toSendtxt) + 1, NO_FLAGS_SET);
- if (numsnt != (int)strlen(toSendtxt) + 1)
- {
- cout << "Connection terminated" << endl;
- status=closesocket(destSocket);
- if (status == SOCKET_ERROR)
- cerr << "ERROR: closesocket unsuccessful" << endl;
- status=WSACleanup();
- if (status == SOCKET_ERROR)
- cerr << "ERROR: WSACleanup unsuccessful" << endl;
- return(1);
- }
- /* Wait before sending the message again */
- Sleep(1000);
- } /* while */
- }
win32 socket的一个简单的例子 控制台相关推荐
- blockchain 区块链200行代码:在JavaScript实现的一个简单的例子
blockchain 区块链200行代码:在JavaScript实现的一个简单的例子 了解blockchain的概念很简单(区块链,交易链块):它是分布式的(即不是放置在同一台机器上,不同的网络设备上 ...
- pycharm安装scrapy失败_Scrapy ——环境搭配与一个简单的例子
在我刚接触爬虫的时候就已经听过Scrapy大名了,据说是一个很厉害的爬虫框架,不过那个时候沉迷于Java爬虫.现在终于要来揭开它神秘的面纱了,来一起学习一下吧 欢迎关注公众号:老白和他的爬虫 1.环境 ...
- antlr4例子_ANTLR和网络:一个简单的例子
antlr4例子 网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序. 因此,我非常习惯在自己的机器上安装工具. 但是在2016年,网络无处不在,因此那里也可能需要我们的语言. 可 ...
- ANTLR和网络:一个简单的例子
网络上的ANTLR:为什么? 我开始在MS-DOS上编写我的第一个程序. 因此,我非常习惯在计算机上安装工具. 但是在2016年,网络无处不在,因此那里也可能需要我们的语言. 可能的情况: ANTLR ...
- 跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击
跨站脚本功攻击,xss,一个简单的例子让你知道什么是xss攻击 一.总结 一句话总结:比如用户留言功能,用户留言中写的是网页可执行代码,例如js代码,然后这段代码在可看到这段留言的不同一户的显示上就会 ...
- React.js 小书 Lesson1-2 - 前端组件化(一):从一个简单的例子讲起
React.js 小书 Lesson1-2 - 前端组件化(一):从一个简单的例子讲起 本文作者:胡子大哈 本文原文:http://huziketang.com/books/react/lesson2 ...
- .net中的对象序列化(1): 序列化是什么, 以及一个简单的例子
1. 为什么需要序列化,什么是序列化 对于一个程序来说, 使用到的对象都是存在于内存中的.如果想保存这些对象的运行时状态, 或者需要在不同进程或者网络间传递对象,就需要序列化. 序列化就是讲运行中的对 ...
- 一个简单的例子看java线程机制
一个简单的例子看java线程机制 作者: zyf0808 发表日期: 2006-03-26 11:20 文章属性: 原创 复制链接 import java.util.*; public class T ...
- java继承类型转换_#java 一个简单的例子理解java继承、成员函数重写、类型转换...
一个简单的例子理解java继承.成员函数重写.类型转换 1.继承简介 举一个简单的例子:笔分为很多种,比如毛笔.钢笔.圆珠笔等等,这些笔都有一些相同的属性比如长度.笔迹的粗细等等:但他们也有不同的特点 ...
最新文章
- ios(iphone/ipad)开发笔记(1)
- 激活当前视图菜单高亮呈现 V2.0
- 微生物组数据库: 一站式环境基因组学数据云平台更新啦!
- 操作系统期末考试重点
- 配置Bean的作用域对象
- 数据装载全/存量直接装载到目标表_09
- 新手安装Ubuntu操作系统
- java.io.StreamCorruptedException: invalid type code: AC错误的解决方法
- 拜托,面试别再问我基数排序了!!!
- MybatisPlus学习笔记
- 什么是android原生系统版本,定制安卓和原生Android到底有哪些不同之处?彻底真相了...
- 如何使用CodeSmith批量生成代码(原创系列教程)
- 高等代数 多项式环(第7章)5* 结式与域
- 完整缓和曲线和非完整缓和曲线交点法坐标计算应用
- 计算机硬件未来发展前景,计算机硬件现状及其发展趋势
- MT8377 MT8389 MT6589 MT6577解析
- 推荐王森的关于j2me开发的2本书!
- 阿里邮箱备份,引发的小小插曲--2018年6月21日
- android 微信高仿,Android高仿微信聊天界面代码分享
- Java面试:java小项目实例
热门文章
- android 选座,机票在线选座 Android 开源库
- html清除溢出,深入理解CSS overflow:hidden——溢出,坍塌,清除浮动
- 自定义linux命令工具栏,如何自定义Mac终端并使其更有用!
- php注册界面模板,WeUI注册页面
- 网信号好怎么不显示无服务器,苹果iPhone12经常出现无服务状态 信号不好怎么解决...
- windows获取硬件设备的guid_Windows编程技术:提权技术(下)
- 学好单片机必须要了解的的8个电路设计
- 国一B题方案解析:轴距仅210mm的四旋翼有多稳?
- java object.getclass_Java Object getClass() 方法
- 命令执行漏洞-命令执行-漏洞位点- 代码注入-漏洞利用-联合执行-Bypass(空格,关键字过滤,变量绕过)-例题两道-actf2020exec-GXYCTF2019 Ping Ping Ping