winSockets编程(三)最简单的C/S形式
功能:向服务器端发送一个字符串,属于最简易的形式,一共需要4个主要步骤,初始化-建立套接字-连接服务器-发送数据
/************************************************************************
* 此代码为最简易的客户端形式,需要背诵
* 作者: Tinaluo
* 日期: 2017/10/24
************************************************************************/ #include <WinSock2.h>
#include <iostream>
#pragma comment(lib,"ws2_32.lib") int main()
{
WSADATA wsd;
if (WSAStartup(MAKEWORD(, ), &wsd) != )
{
std::cout << "版本不支持" << std::endl;
return -;
} SOCKET sHost = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == sHost)
{
std::cout << "创建套接字失败" << std::endl;
WSACleanup();
return -;
} SOCKADDR_IN servAddr;
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
servAddr.sin_port = htons();
int retVal = connect(sHost, (LPSOCKADDR)&servAddr, sizeof(servAddr));
if (retVal == SOCKET_ERROR)
{
std::cout << "连接服务器失败!" << std::endl;
closesocket(sHost);
WSACleanup();
return -;
} char buf[MAX_PATH];
ZeroMemory(buf, MAX_PATH);
strcpy_s(buf, "Connect successful!");
retVal = send(sHost, buf, strlen(buf), );
if (retVal == SOCKET_ERROR)
{
std::cout << "发送失败!" << std::endl;
closesocket(sHost);
WSACleanup();
return -;
} std::cout << "关闭套接字!" << std::endl;
closesocket(sHost);
WSACleanup();
return ;
}
服务端
/************************************************************************
* 最简易服务器端
* 目标:接收客户端问候(此程序需要极其熟练并背诵!)
* 作者:Luotian
* 日期:2017/10/25
************************************************************************/
#include <iostream>
#include "winsock2.h"
#pragma comment(lib, "ws2_32.lib") int main()
{
WSADATA wsd;
if (WSAStartup(MAKEWORD(, ), &wsd) != )
{
std::cout << "初始化失败!" << std::endl;
return -;
} SOCKET serverSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (INVALID_SOCKET == serverSocket)
{
std::cout << "创建套接字失败!" << std::endl;
WSACleanup();
return -;
} SOCKADDR_IN addrServ;
addrServ.sin_family = AF_INET;
addrServ.sin_port = htons();
addrServ.sin_addr.s_addr = INADDR_ANY; int retVal = bind(serverSocket, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));
if (SOCKET_ERROR == retVal)
{
std::cout << " 绑定套接字失败!" << std::endl;
closesocket(serverSocket);
WSACleanup();
return -;
} retVal = listen(serverSocket, );
if (SOCKET_ERROR == retVal)
{
std::cout << "创建监听失败!" << std::endl;
closesocket(serverSocket);
WSACleanup();
return -;
} sockaddr_in addrClient;
int addrClientlen = sizeof(addrClient);
SOCKET clientSocket = accept(serverSocket, (sockaddr FAR*)&addrClient, &addrClientlen);
if (INVALID_SOCKET == clientSocket)
{
std::cout << "接受请求失败!" << std::endl;
closesocket(serverSocket);
WSACleanup();
return -;
} char buf[MAX_PATH];
ZeroMemory(buf, MAX_PATH);
retVal = recv(clientSocket, buf, MAX_PATH, );
if (SOCKET_ERROR == retVal)
{
std::cout << "获取数据失败!" << std::endl;
closesocket(serverSocket);
closesocket(clientSocket);
WSACleanup();
return -;
}
std::cout <<buf<< std::endl; closesocket(serverSocket);
closesocket(clientSocket);
WSACleanup();
return ;
}
winSockets编程(三)最简单的C/S形式的更多相关文章
- iOS开发UI篇—iOS开发中三种简单的动画设置
iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...
- [电子书] 《Android编程入门很简单》
<Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...
- Linux网络编程(三)
Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...
- Java并发编程三个性质:原子性、可见性、有序性
并发编程 并发程序要正确地执行,必须要保证其具备原子性.可见性以及有序性:只要有一个没有被保证,就有可能会导致程序运行不正确 线程不安全在编译.测试甚至上线使用时,并不一定能发现,因为受到当时的 ...
- 使用socket编程实现一个简单的文件服务器
使用socket编程实现一个简单的文件服务器.客户端程序实现put功能(将一个文件从本地传到文件服务器)和get功能(从文件服务器取一远程文件存为本地文件).客户端和文件服务器不在同一台机器上. pu ...
- Win Socket编程原理及简单实例
[转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...
- 三种简单的html网页自动跳转方法
三种简单的html网页自动跳转方法,可以让你在打开一个html网页时自动跳转到其它的页面. 方法/步骤 <html> <head> <title>正在跳转< ...
- NHibernate 映射基础(第三篇) 简单映射、联合主键
NHibernate 映射基础(第三篇) 简单映射.联合主键 NHibernate完全靠配置文件获取其所需的一切信息,其中映射文件,是其获取数据库与C#程序关系的所有信息来源. 一.简单映射 下面先来 ...
- mininet(三)简单的NAT实验
mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 本次实验拓扑图如下: 假设 Openvswitch switch1是一个带有NAT功能的路由 ...
- C语言程序设计(三) 简单的算术运算和表达式
第三章 简单的算术运算和表达式 算数运算符:一元.二元.三元(条件运算符) 1/2是整型除法,1.0/2是浮点数除法 求余运算(%)限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算 ...
随机推荐
- SQL Server 2008中的CTE递归查询得到一棵树
ROW_NUMBER() OVER()函数用法 with CTE as ( -->Begin 一个定位点成员 select ID, Name,Parent,cast ...
- select into tb_temp2 from tb_temp1 创建临时表实现上一个、下一个功能,使用完毕就删除临时表
好久没有写过Sql了,今天遇到一个问题,业务逻辑是: 一个商品可以属于多个分类,在显示商品详情的时候,要求可以点击“上一个”,“下一个” 查看和该商品在同一个分类下的其他商品,商品具有排序号. 这样我 ...
- 2Y - sort
给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含n个各不相同,且都处于区间[-5000 ...
- 8Q - 献给杭电五十周年校庆的礼物
我不能参赛,就送给学校一个DOOM III球形大蛋糕吧.等一等,吃蛋糕之前先考大家一个问题:如果校长大人在蛋糕上切了N刀(校长刀法极好,每一刀都是一个绝对的平面),最多可以把这个球形蛋糕切成几块呢? ...
- Maven 系列 一 :Maven 快速入门及简单使用
开发环境 MyEclipse 2014 JDK 1.8 Maven 3.2.1 1.什么是Maven? Maven是一个项目管理工具,主要用于项目构建,依赖管理,项目信息管理. 2.下载及安装 下载最 ...
- elasticsearch权威指南
elasticsearch权威指南 https://elasticsearch.cn/book/elasticsearch_definitive_guide_2.x/
- 如何搭建http服务仓库
1.拷贝仓库repo-A文件到服务器/media/D: 2.通过createrepo_c 生成仓库rpm信息数据 cd repo-A createrepo . 3.chmod -R 775 repo ...
- POJ3662或洛谷1948 Telephone Lines
二分答案+单源最短路 POJ原题链接 洛谷原题链接 显然可以二分答案,检验\(mid\)可以使用最短路来解决. 将大于\(mid\)的边看成长度为\(1\)的边,说明要使用免费升级服务,否则长度为\( ...
- Lazarus下面的javascript绑定另外一个版本bug修正
Lazarus下面的javascript绑定另外一个版本bug修正 从svn 检出的代码有几个问题 1.fpcjs.pas 单元开始有 {$IFDEF FPC} {$MODE delphi} {$EN ...
- jmeter对需要登录的接口进行性能测测试
只需要一步: https://www.testwo.com/blog/7253