当前位置: 首页 > 编程日记 > 正文

Windows Socket编程笔记之最简单的小Demo

Windows Socket编程的大致过程:
服务器端:
----过程-------------对应的API-------
 0.初始化         |  WSAStartup()
 1.创建Socket     |  socket()
 2.绑定Socket     |  bind()
 3.监听           |  listen()
 4.接受连接       |  accept()
 5.接收/发送数据  |  recv()/send()
 6.关闭socket     |  closesocket()
 7.释放资源       |  WSACleanup()
_____________________________________
客户端:
 0.初始化         |  WSAStartup()
 1.创建Socket     |  socket()
 2.连接Socket     |  connect()
 3.接收/发送数据  |  recv()/send()
 4.关闭socket     |  closesocket()
 5.释放资源       |  WSACleanup()
_____________________________________

以下是按照上面所述步骤编写的服务器端和客户端最简单的一个小例子:

0.服务器端代码:

// FileName: Server.cpp// 服务器端#include<stdio.h>#include<winsock.h>#include<windows.h>#pragma comment(lib,"ws2_32")#define PORT 2012#define IP "127.0.0.1"void main(){// 0.初始化WSADATA wsaData;WSAStartup(0x0202, &wsaData);// 1.创建SocketSOCKET sockServer;sockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 2.绑定Socketstruct sockaddr_in sockaddrServer;sockaddrServer.sin_family = AF_INET;sockaddrServer.sin_addr.S_un.S_addr = inet_addr(IP);sockaddrServer.sin_port = htons(PORT);memset(sockaddrServer.sin_zero, 0x00, 8);bind(sockServer, (struct sockaddr*)&sockaddrServer, sizeof(sockaddrServer));// 3.监听listen(sockServer, 0);// 4.接受连接struct sockaddr_in sockaddrClient; // 用于存放客户端地址信息int addrlen = sizeof(sockaddrClient);SOCKET sockClient = accept(sockServer, (struct sockaddr*)&sockaddrClient, &addrlen);printf("IP: %s\n", inet_ntoa(sockaddrClient.sin_addr));printf("PORT: %d\n", ntohs(sockaddrClient.sin_port));// 5.recvchar buf[64] = {0};recv(sockClient, buf, 64, 0);printf("Recv buf = %s\n", buf);// 6.关闭Socketclosesocket(sockServer);// 7.释放资源WSACleanup();}

1.客户端代码:

// FileName: Client.cpp// 客户端#include<stdio.h>#include<winsock.h>#pragma comment(lib, "ws2_32")#define IP "127.0.0.1"#define PORT 2012void main(){// 0.初始化WSADATA wsaData;WSAStartup(0x0202, &wsaData);// 1.绑定SocketSOCKET sockServer= socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);// 2.连接Socketstruct sockaddr_in sockaddrServer;sockaddrServer.sin_family = AF_INET;sockaddrServer.sin_addr.S_un.S_addr = inet_addr(IP);sockaddrServer.sin_port = htons(2012);memset(sockaddrServer.sin_zero, 0x00, 8);connect(sockServer, (struct sockaddr*)&sockaddrServer, sizeof(sockaddrServer));// 3.sendsend(sockServer, "helloworld", strlen("helloworld"), 0);// 4.关闭Socketclosesocket(sockServer);// 5.释放资源WSACleanup();}

 

转载于:https://www.cnblogs.com/rookie2/archive/2012/09/28/2705606.html

相关文章:

React项目实战

一、环境搭建 1.安装react-cli脚手架&#xff08;保证提前安装好Node最新版本&#xff09; npm config set registry http://registry.npm.taobao.org/ npm config set sass-binary-site http://npm.taobao.org/mirrors/node-sass npm isntall -g create-react-app 2.查看react…

win7完美兼容DynamipsGUI(小凡模拟器)攻略

博主又是好久没写了&#xff0c;今天闲来无事与大家一起分享一下如何在windows7平台下完美兼容DynamipsGUI&#xff08;小凡模拟器&#xff09;的一个小窍门~ 对于学习cisco的朋友来说&#xff0c;DynamipsGUI&#xff08;小凡模拟器&#xff09;一定不陌生&#xff0c;在这就不…

使用PHPExcel 对表格进行,读取和写入的操作。。。。

下面的代码是使用PHPExcel 对多个表格数据进行读取&#xff0c; 然后整合的写入新的表格的方法&#xff01;&#xff01;&#xff01;代码有点粗糙 &#xff0c; 多多保函&#xff01;&#xff01;&#xff01; 这里有些地方注意下&#xff0c;如果你的表格数据过大&#xff0c…

c# .netframwork 4.0 调用 2.0时报错 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。...

“System.IO.FileLoadException”类型的未经处理的异常在 XXX.dll 中发生 其他信息: 混合模式程序集是针对“v2.0.50727”版的运行时生成的&#xff0c;在没有配置其他信息的情况下&#xff0c;无法在 4.0 运行时中加载该程序集。 这时需要改dbconfig配置 在configuration 节点…

python多线程并发_Python进阶记录之基础篇(二十四)

回顾在Python进阶记录之基础篇(二十三)中&#xff0c;我们介绍了进程的基本概念以及Python中多进程的基本使用方法。其中&#xff0c;需要重点掌握多进程的创建方法、进程池和进程间的通信。今天我们讲一下Python中的多线程。线程的基本概念线程是操作系统能够进行运算调度的最…

awk处理文件内容格式

今天运营出了点问题&#xff0c;需要对特定时间段充值数做一个处理&#xff0c;文件格式有特定要求&#xff0c;要符合erlang的格式{roleID,gold}.mysql导出所有数据结果如下【取部分数据看】&#xff1a;kuwo 4 50004106230500 100kuwo 4 50004106230900 …

QQ远程协助没动静?QQ版本有讲究

一位网友觉得电脑反应速度慢了&#xff0c;想通过QQ远程协助让我处理一下。不料接受请求后&#xff0c;等了许久都显示网友电脑的桌面&#xff0c;而网友那边QQ也没有任何提示。 反复尝试了几次都是如此。 询问网友得知他用的QQ为2011版&#xff0c;而我使用的QQ是2008版。难…

java课堂测试样卷-----简易学籍管理系统

程序设计思路&#xff1a;分别建立两个类&#xff1a;ScoreInformation类(用来定义学生的基本信息以及设置set和get函数&#xff09;ScoreManagement类&#xff08;用来定义实现学生考试成绩录入&#xff0c;考试成绩修改&#xff0c;绩点计算等功能的函数&#xff09;和一个主…

python3安装setuptools步骤_setuptools、pip的安装

第2篇分享 安装setuptools 下载setuptools源码setuptools-25.2.0.tar.gz选择需要的版本 这是一个压缩文件&#xff0c;将其解压到桌面&#xff0c;并进入该文件夹 按住shift键后&#xff0c;在文件夹空白处点击鼠标右键&#xff0c;选择&#xff1a;在此处打开命令窗重点&#…

如何将简单CMS后台管理系统示例转换为Java、Php等不同后台语言的版本

等下要去坐车&#xff0c;今天就不继续唠叨开发过程了&#xff0c;来谈一下普遍比较关心的后台语言问题。学习Ext JS&#xff0c;笔者一直强调学习的中心思路是“界面与数据是分离”。只要好好掌握这个思路&#xff0c;深入了解Ext JS的运作过程&#xff0c;就不会为后台语言使…

[面试]future模式

Future模式 什么是future模式? 传统单线程环境下&#xff0c;调用函数是同步的&#xff0c;必须等待程序返回结果后&#xff0c;才可进行其他处理。 Futrue模式下&#xff0c;调用方式改为异步。 Futrue模式的核心在于&#xff1a;充分利用主函数中的等待时间&#xff0c;利用…

java ide

tidespringsource sts a vmware product plugin:Aptana Studio 3(集成了Git) Run on Jettyeclipse for jee plugin:JBoss Tools,m2eclipe,spirng tools,svn

成长秘笈:是你教我,不是我教你

郑昀 20180622 “谢谢你&#xff0c;你是第一个面试的时候跟我说这么详细的。那我到你们公司之后怎么就能成长了呢&#xff1f;” “你们这些人最大的问题是出不了方案。 为什么出不了方案&#xff1f; 因为没有养成深度思考问题的习惯。 实现方案、算法、数据迁移、准备数据、…

计算机网络面试题(一)

1、OSI&#xff0c;TCP/IP&#xff0c;五层协议的体系结构&#xff0c;以及各层协议 OSI分层 &#xff08;7层&#xff09;&#xff1a;物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。 TCP/IP分层&#xff08;4层&#xff09;&#xff1a;网络接口 网络层、运…

Ubuntu下安装和配置Apache2

在Ubuntu中安装apache 安装指令&#xff1a;sudo apt-get install apache2 安装结束后&#xff1a; 产生的启动和停止文件是&#xff1a;/etc/init.d/apache2 启动&#xff1a;sudo apache2ctl -k start 停止&#xff1a;sudo apache2ctl -k stop 重新启动&#xff1a;sudo apa…

苹果电脑安装python3密码_mac系统安装Python3初体验

前沿 对于iOS开发不要随便拆卸系统自带的Python,因为有很多 library 还是使用 Python2.7。 1 安装Xcode 1.1 App Store 搜索Xcode 并安装 1.2 安装 Xcode command line tool 1.2.1 打开命令行terminal工具 control space 输入terminal 回车 1.2.2 安装Xcode command line tool…

【IBM Tivoli Identity Manager 学习文档】3 系统部署

作者&#xff1a;gnuhpc 出处&#xff1a;http://www.cnblogs.com/gnuhpc/ ITIM 5.0 单服务器配置和部署。 部署ITIM之前要对其组件进行部署&#xff1a; IBM DB2 Enterprise 9.1 with FP2 IBM WebSphere Application Server 6.1 with FP9 IBM Tivoli Directory Server 6.2 IB…

数据结构Java版之红黑树(八)

红黑树是一种自动平衡的二叉查找树&#xff0c;因为存在红黑规则&#xff0c;所以有效的防止了二叉树退化成了链表&#xff0c;且查找和删除的速度都很快&#xff0c;时间复杂度为log(n)。 什么是红黑规则&#xff1f; 1.根节点必须是黑色的。 2.节点颜色要么是红要么是黑。 3.…

你真的了解Grid布局吗?

Grid网格布局 概述&#xff1a;Grid将容器划分为一个个网格&#xff0c;通过任意组合不同的网格&#xff0c;做出你想想要的布局 Grid与flex布局相似&#xff0c;将整个Grid分为了容器与子项&#xff08;格子&#xff09; Grid容器的三个重要的概念&#xff1a; 行和列单元格网…

webform里的验证控件

1.非空验证控件&#xff1a;RequireFieldValidator &#xff1b;2.数据比较验证&#xff1a;CompareValidator &#xff1b;3.数据范围验证&#xff1a;RangeValidator &#xff1b;4.正则表达式验证&#xff1a;RegularExpressionValidator &#xff1b;5.自定义条件验证&…

hash是线程安全的吗?怎么解决?_这次进程、线程、多线程和线程安全问题,一次性帮你全解决了...

1. 什么是进程一个软件&#xff0c;在操作系统中运行时&#xff0c;我们称其为进程。进程是操作系统分配资源的最小单元&#xff0c;线程是操作系统调度的最小单元。2. 什么是线程在一个进程中&#xff0c;每个独立的功能都需要独立的去运行&#xff0c;这时又需要把当前这个进…

WinXP不能共享Win7的打印机的解决方法

现在很多企业里存在着WinXP和Win7混用&#xff0c;WinXP不能正常共享Win7的文件和打印机&#xff0c;经过设置发现Win7可以Ping通Winxp并且也可以发现WinXP的共享文件&#xff0c;可是WinXP却不能共享Win7的文件和打印机&#xff0c;看了一下相关资料后简单设置就解决了这个问题…

第三阶段 10_JavaWeb基础_

因为要准备接本&#xff0c;不一定能够每天更新 转载于:https://www.cnblogs.com/BaiZe258/p/9251075.html

工厂模式(Factory)(转)

先来明确一个问题&#xff0c;那就是有的时候&#xff0c;实例化这个活动不应该总是公开的进行&#xff0c; 也就是不要公开的使用 new 操作符&#xff0c;因为&#xff0c;这样容易造成耦合问题。 我们不应该针对实现编程&#xff0c;但是当我们在使用 new 的时候&#xff0c;…

Asp.net后台创建HTML

为了使HTML界面中的内容能根据数据库中的内容动态显示用户需要的内容&#xff0c;或者根据权限不同要显示同而实现页面内容的动态创建 使用HtmlGenericControl创建HTML标签 引入命名空间: using System.Web.UI.HtmlControls; 更改其属性: hgg_div.Attributes.Add("style&q…

oracle视图(转)

视图的概念 视图是基于一张表或多张表或另外一个视图的逻辑表。视图不同于表&#xff0c;视图本身不包含任何数据。表是实际独立存在的实体&#xff0c;是用于存储数据的基本结构。而视图只是一种定义&#xff0c;对应一个查询语句。视图的数据都来自于某些表&#xff0c;这些…

Redis 事物

redis 事物&#xff1a; Redis 事物的实现&#xff1a; 首先 wath监控键值 myKey开启批量执行 multi&#xff0c;执行命令入列&#xff0c;执行 exec 。如果监控的键值mykey 没有被修改过&#xff0c;则exec 中批量执行的命令成功&#xff0c;否则执行失败。无论执行成功与否&a…

python dos攻击_利用SMB漏洞DoS攻击任何Windows系统

原标题&#xff1a;利用SMB漏洞DoS攻击任何Windows系统近日微软报出SMB V1存在漏洞&#xff0c;安全研究员并将此漏洞称作 “ SMBLoris ”&#xff0c;解释其能够发动拒绝服务&#xff08;Dos&#xff09;攻击&#xff0c;可以感染 Windows 2000 及以上操作系统的任一版本 SMB …

java基础编程题(2)

1、给定一个二叉树&#xff0c;找出其最大深度。 注&#xff1a;二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x…

python元组转字典_python中怎么将元组、字典转化为列表

python中将元组、字典转化为列表的方法&#xff1a; python中可以使用list()方法将元组或字典转化为列表&#xff1a; list()方法语法&#xff1a;list( tup ) 参数 tup -- 要转换为列表的元组。 返回值 返回列表。 示例&#xff1a; 将元组转换为列表&#xff1a;#!/usr/bin/p…