功能:向服务器端发送一个字符串,属于最简易的形式,一共需要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形式的更多相关文章

  1. iOS开发UI篇—iOS开发中三种简单的动画设置

    iOS开发UI篇—iOS开发中三种简单的动画设置 [在ios开发中,动画是廉价的] 一.首尾式动画 代码示例: // beginAnimations表示此后的代码要“参与到”动画中 [UIView b ...

  2. [电子书] 《Android编程入门很简单》

    <Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入 ...

  3. Linux网络编程(三)

    Linux网络编程(三) wait()还是waitpid() Linux网络编程(二)存在客户端断开连接后,服务器端存在大量僵尸进程.这是由于服务器子进程终止后,发送SIGCHLD信号给父进程,而父进 ...

  4. Java并发编程三个性质:原子性、可见性、有序性

      并发编程 并发程序要正确地执行,必须要保证其具备原子性.可见性以及有序性:只要有一个没有被保证,就有可能会导致程序运行不正确  线程不安全在编译.测试甚至上线使用时,并不一定能发现,因为受到当时的 ...

  5. 使用socket编程实现一个简单的文件服务器

    使用socket编程实现一个简单的文件服务器.客户端程序实现put功能(将一个文件从本地传到文件服务器)和get功能(从文件服务器取一远程文件存为本地文件).客户端和文件服务器不在同一台机器上. pu ...

  6. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...

  7. 三种简单的html网页自动跳转方法

    三种简单的html网页自动跳转方法,可以让你在打开一个html网页时自动跳转到其它的页面. 方法/步骤   <html> <head> <title>正在跳转< ...

  8. NHibernate 映射基础(第三篇) 简单映射、联合主键

    NHibernate 映射基础(第三篇) 简单映射.联合主键 NHibernate完全靠配置文件获取其所需的一切信息,其中映射文件,是其获取数据库与C#程序关系的所有信息来源. 一.简单映射 下面先来 ...

  9. mininet(三)简单的NAT实验

    mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 本次实验拓扑图如下: 假设 Openvswitch switch1是一个带有NAT功能的路由 ...

  10. C语言程序设计(三) 简单的算术运算和表达式

    第三章 简单的算术运算和表达式 算数运算符:一元.二元.三元(条件运算符) 1/2是整型除法,1.0/2是浮点数除法 求余运算(%)限定参与运算的两个操作数必须为整数,不能对两个实型数据进行求余运算 ...

随机推荐

  1. 将文件转换成byte[]数组

    代码 /// <summary> /// 将文件转换成byte[] 数组 /// </summary> /// <param name="fileUrl&quo ...

  2. istio prometheus预警Prometheus AlertManager

    1.安装alertmanager kubectl create -f 以下文件 alertmanager-templates.yaml.configmap.yaml.deployment.yaml.s ...

  3. Intellij idea 系列教程之常用配置项

    Intellij idea 系列教程之常用配置项 Intellij idea 系列教程目录(https://www.cnblogs.com/binarylei/p/10347600.html) Lan ...

  4. js模态框实现原理

    <!DOCTYPE> <html> <head> <style>/* 定义模态对话框外面的覆盖层样式 */ #modal-overlay { visib ...

  5. Python3实战系列之四(获取印度售后数据项目)

    问题:续接上一篇.说干咱就干呀,勤勤恳恳写程序呀! 目标:此篇开始进入正题了.为实现我们整个项目功能而开始实现各个子模块功能.首先实现第一篇列出的分步功能模块的第一步: 1.python访问ftp,下 ...

  6. ajax post 请求 ,java端使用 request.getParameter 获取不到数据问题

    js端 $.ajax({ type:'POST', data:{a:1}, url:_this.apiUrl+url, dataType:'json',//使用jsonp方式请求 contentTyp ...

  7. sqlserver 数据迁移

    转载地址: 1.https://blog.csdn.net/yh_zeng2/article/details/72901892 2.https://www.cnblogs.com/jpfss/p/91 ...

  8. css字符串转换为类map对象及反转

    存储对象为啥是类map(即:{key:val,...}格式),因为Map对象的val为字符时,无法存储 '('.')' 左右括号,我也很无奈╮(╯▽╰)╭ 解析脚本: <!DOCTYPE htm ...

  9. 2019.01.02 bzoj5300: [Cqoi2018]九连环(fft优化高精+快速幂)

    传送门 题意不好描述(自己看样例解释) 首先可以推出一个递推式:fn=fn−1+2fn−2+1f_n=f_{n-1}+2f_{n-2}+1fn​=fn−1​+2fn−2​+1 然后可以构造两个等式: ...

  10. Spring+mvc错误

    1.2016-11-13 16:49:22 原因:@ResponseBody注解没加