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是浮点数除法 求余运算(%)限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算 ...
随机推荐
- 举个通俗易懂的例子告诉你IAAS,SAAS,PAAS的区别
作者:何足道链接:https://www.zhihu.com/question/21641778/answer/62523535来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- Oracle 修改字段顺序的两种方法
分类: Oracle 如果要修改字段顺序,一般情况可以使用以下步骤: --(1)备份目标表数据 create table 临时表 as select * from 目标表; --(2)drop 目标表 ...
- C# json解析字符串总是多出双引号
json好久没用了,今天在用到json的时候,发现对字符串做解析的时候总是多出双引号. 代码如下: string jsonText = "{'name':'test','phone':'18 ...
- mount重新挂载为写模式
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system mount -o remount,rw -t rootfs rootfs /
- BZOJ1912或洛谷3629 [APIO2010]巡逻
一道树的直径 BZOJ原题链接 洛谷原题链接 显然在原图上路线的总长为\(2(n-1)\). 添加第一条边时,显然会形成一个环,而这条环上的所有边全部只需要走一遍.所以为了使添加的边的贡献最大化,我们 ...
- 更好地限制一个UITextField的输入长度
要限制一个UITextField的输入字数,首先想到的应该是通过 UITextFieldDelegate 的代理方法来限制: - (BOOL)textField:(UITextField *)text ...
- c++文件中引用C代码
下面提供一个比较完整的示例程序,一共有四个文件:main.cpp.test.c.test.h.test.hpp main.cpp #include "test.hpp" int m ...
- android 使用webview 加载网页
1. <WebView android:id="@+id/webView" android:layout_width="fill_parent" andr ...
- nginx 动静分离 以及 负载均衡配置
测试环境 系统版本:win7 Nginx版本:nginx-1.8.1 Tomcat版本:tomcat-6.0.14 1动静分离配置 Nginx.conf 中 server中 server { list ...
- 关于js的function.来自百度知道的回答,学习了.
在js中,创建一个函数对象的语法是var myFunction = new Function(arg1,…,agrN, body);其中,该函数对象的N个参数放在 函数主体参数body的前面,即函数主 ...