第一个windows网络程序

网络编程:第一个网络程序 网络编程---基础篇 第一个网络程序 说明:       《网络编程》一文将从简单的socket调用到相对复杂的异步网络通信逐步与大家分享网路编程的乐趣,我们将在WINDOWS下使用VS2010为大家展示代码以及程序运行效果。我们不会使用WINDOWS封装的socket工具,这是出于对跨平台的要求,此外我们着重分享如何编写网络程序,对于计算机网络的基础只会在文中零星介绍,如果读者对计算机网络 阅读详情

之前我一直在学习c#,相比c/c++来说,vs环境提供了更多的方便。

但是从今天开始我决定学习网络编程使用的语言不是c#,而是C/c++,虽然我不排斥c#和asp.net,因为他们具有更好的语法和开发效率,并且容易学习。

网络程序分为client 和server.windows封装了底层的网络操作,提供了一个通用的socket接口

常用函数WSAStartup(),socket(),closesocket(),WSACleanup(),connect().

常用数据结构sockaddr_in,和较早版本的sockaddr.

头文件:Wincock2.h

库文件:ws2_32.lib(使用这样的语法包含#pragma   comment(lib,"ws2_32.lib ")

下边贴上最基本的代码

server端 :
程序逻辑,建立监听5000端口,然后等待客户端连接,发送"hello"字符串,然后关闭连接,重新等待新连接

Code:
  1. #include <Winsock2.h>   
  2. #include <stdio.h>   
  3. #include <stdlib.h>   
  4. #pragma   comment(lib,"ws2_32.lib ")   
  5. #define PORT 5000   
  6. void main()   
  7. {   
  8.     int port = PORT;   
  9.     WSADATA wsadata;   
  10.     SOCKET sListen,sAccept;   
  11.     int iLen;   
  12.     int iSend;   
  13.     char buf[] = "hello";   
  14.     struct sockaddr_in serv,client;   
  15.     if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)   
  16.     {   
  17.         printf("Winsock load failed/n");   
  18.         return;   
  19.     }   
  20.     sListen = socket(AF_INET,SOCK_STREAM,0);   
  21.     if(sListen ==INVALID_SOCKET)   
  22.     {   
  23.         printf("socket failed:%d/n",WSAGetLastError());   
  24.         return;   
  25.     }   
  26.        
  27.        
  28.     serv.sin_family = AF_INET;   
  29.     serv.sin_port = htons(port);   
  30.     serv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);   
  31.     if(bind(sListen,(struct sockaddr*)&serv,sizeof(serv))==SOCKET_ERROR)   
  32.     {   
  33.         printf("bind() failed:%d/n",WSAGetLastError());   
  34.         return;   
  35.     }   
  36.     if(listen(sListen,5)==SOCKET_ERROR)   
  37.     {   
  38.         printf("listen failed:%d/n",WSAGetLastError());   
  39.         return;   
  40.   
  41.     }   
  42.     iLen = sizeof(client);   
  43.     while(1)   
  44.     {   
  45.         sAccept = accept(sListen,(struct sockaddr*)&client,&iLen);   
  46.         if(sAccept == INVALID_SOCKET)   
  47.         {   
  48.             printf("accept()error:%d/n",WSAGetLastError());   
  49.             return;   
  50.         }   
  51.         printf("accept client information:/n/tip:[%s],/n/tport:[%d]/n",inet_ntoa(client.sin_addr),ntohs(client.sin_port));   
  52.         iSend = send(sAccept,buf,sizeof(buf),0);   
  53.         if(iSend == SOCKET_ERROR)   
  54.         {   
  55.             printf("send() failed:%d/n",WSAGetLastError());   
  56.             return;   
  57.         }   
  58.         else if(iSend==0)   
  59.             break;   
  60.         else  
  61.             printf("send() byte:%d/n",iSend);   
  62.         closesocket(sAccept);   
  63.     }   
  64.     closesocket(sListen);   
  65.     WSACleanup();   
  66. }  

client端
程序逻辑:主动连接192.168.0.100的5000端口,注意使用网络字节序和本地字节序的转换htons(),htonl(),ntohs(),ntohl().

Code:
  1. #include <Winsock2.h>   
  2. #include <stdio.h>   
  3. #include <stdlib.h>   
  4. #pragma   comment(lib,"ws2_32.lib ")   
  5.   
  6. #define PORT 5000   
  7. #define BUFFER 1024   
  8. # define serveraddr 127.0.0.1   
  9. void main(int argc,char *argv)   
  10. {   
  11.     WSADATA wsadata;   
  12.     SOCKET client;   
  13.     int port = PORT;   
  14.     int iLen;   
  15.     char buf[BUFFER];   
  16.     struct sockaddr_in serv;   
  17.     memset(buf,0,sizeof(buf));   
  18.     if(WSAStartup(MAKEWORD(2,2),&wsadata)!=0)   
  19.     {   
  20.         printf("Winsock load failed/n");   
  21.         return;   
  22.     }   
  23.     serv.sin_family = AF_INET;   
  24.     serv.sin_port = htons(port);   
  25.     serv.sin_addr.S_un.S_addr = inet_addr("192.168.0.100");   
  26.     client = socket(AF_INET,SOCK_STREAM,0);   
  27.     if(client == INVALID_SOCKET)   
  28.     {   
  29.         printf("socket()failed:%d",WSAGetLastError());   
  30.         return;   
  31.     }   
  32.     if(connect(client,(struct sockaddr*)&serv,sizeof(serv))==INVALID_SOCKET)   
  33.     {   
  34.         printf("connect() failed:%d/n",WSAGetLastError());   
  35.         return;   
  36.     }   
  37.     else  
  38.     {   
  39.         iLen = recv(client,buf,sizeof(buf),0);   
  40.         if(iLen ==0)   
  41.             return;   
  42.         else if(iLen ==SOCKET_ERROR)   
  43.         {   
  44.             printf("revc() failed:%d/n",WSAGetLastError());   
  45.             return;   
  46.   
  47.   
  48.         }   
  49.         else  
  50.         {   
  51.   
  52.         }   
  53.         printf("recv() data from server:%s/n",buf);   
  54.     }   
  55.     closesocket(client);   
  56.     WSACleanup();   
  57.     printf("/nok!");   
  58.     while(1);   
  59. }  

 

第一个Windows网络程序 第一个Windows网络程序,对学习Windows网络编程很有帮助,教你如何正确认识hostent 结构体,如何正确使用Windows api 编写网络程序 立即下载

相关推荐

win10+conda+pytorch-gpu安装

pytorch 官网上只有linux和Mac的程序包,没有windows系统的,但是windows系统还是可以用pytorch的。  github: https://github.com/peterjc123/pytorch-scripts 首先要安装anaconda: 推荐清华镜像 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ ...

一摩尔自由的博客 1万+

第一个网络程序---hostent

在windock api 中,用gethostbyname()和 wsaasyncGetHostByName()函数实现主机名称解析,用gethostbyaddr() 和wsaasyncGetHostByAddr() 函数试实现地址解析。 winsock中的hostent 结构体  typedef sturct hostent{ char * h_name;  //主机名 char ** h

qq_34977392的博客 1340

I2C通信协议SCL与SDA引脚特性:核心要点总结

深入讲解I2C通信协议中SCL和SDA引脚的工作机制与电气特性,帮助理解i2c通信协议的稳定传输原理,掌握上拉电阻配置与信号时序控制要点。

weixin_42103128的博客 2731

第一个CC3200WIFI网络通信程序

准备工具: 硬件: 电脑 MICRO USB数据线 CC3200-LAUNCHXL开发板 软件: IAR/CCS IDE工具 Uniflash3.4  FLASH编程工具 不能使用4.X或更高版本 http://processors.wiki.ti.com/index.php/Category:CCS_UniFlash CC3200SDK-1.2.0-windows-instal

lbaihao的专栏 6565

Ubuntu环境下rknn-toolkit2的安装与兼容性解析

本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。

weixin_29041767的博客 374

泛微Ecology9单点登录实战指南:从Token获取到页面跳转

本文提供了一份详尽的泛微Ecology9单点登录实战指南,重点解析了Token跳转式SSO的核心流程。内容涵盖从理解关键参数(如appid、loginid)与一次性Token机制,到通过代码示例演示如何正确调用接口获取Token,并详细说明了拼接不同场景跳转地址的完整规则与安全实践,旨在帮助开发者高效、稳定地实现业务系统与OA门户的无缝集成。

ol789012345的博客 1064

第一个C#程序Hello World!(Windows Forms版本)

1.新建项目2.在工具箱公共控件中添加Button组件,修改该组件Text属性为:ClickMe3,双击该Button在Form1.cs代码文件中的自动生成button1_Click事件的框架中,添加如下代码。using Sys...

cuibinmo3519的博客 413

Arduino与Proteus仿真实例-HG7881(L9110)驱动直流电机仿真

HG7881(L9110)驱动直流电机仿真 HG7881 (L9110) 双通道电机驱动器模块。 HG7881 (L9110) 是一款紧凑型电机驱动芯片,支持 2.5-12V 电压范围,800mA 连续电流。 这些芯片具有内置输出钳位二极管以保护敏感的微控制器电子设备。 它们适用于非常小的机器人项目。 每个 HG7881 (L9110) 芯片都能够使用两个数字控制输入驱动单个直流电机。 一个输入用于选择电机方向,而另一个用于控制电机速度。 速度是通过使用 PWM 脉冲宽度调制来控制的。 电机驱动器通常具有

视觉与物联智能 3048

Windows网络编程案例教程-董相志 学习记录 第一个网络程序hostent

第一章 网络编程概述 1.3.5第一个网络程序——hostent 对主机的名称和地址解析 WinSock API中定义了一个hostent结构,该结构记录主机的信息,包括主机名、主机别名、地址类型、地址长度和地址列表。hostent的结构定义如下: typedef struct hostent{ char FAR *h_name; //主机名 char FAR FAR **h_aliases; //主机别名 short h_addrtype;//主机类型 short h_length;/

qq_48235921的博客 1350

基于Matlab的磁力计校准(附源码)

磁力计沿传感器的 X、Y 和 Z 轴检测磁场强度。精确的磁场测量对于传感器融合以及确定航向和方向至关重要。为了用于航向和方向计算,需要校准典型的低成本MEMS磁力计,以补偿环境噪声和制造缺陷。一、理想磁力计理想的三轴磁力计沿正交 X、Y 和 Z 轴测量磁场强度。在没有任何磁干扰的情况下,磁力计读数测量地球磁场。如果在传感器通过所有可能的方向旋转时进行磁力计测量,则测量值应位于球体上。球体的半径是磁场强度。要生成磁场样本,请使用对象。出于这些目的,可以安全地假设每个方向的角速度和加速度为零。

珞瑜的博客 4520

波浪补偿控制(AHC)之波浪发生器(CODESYS完整源代码)

波浪发生器平台详细算法和结构介绍请参看下面博客文章:CODESYS平台如何建立FC和FB,请参看下面博客文章:

RXXW_Dor的博客 401

买了本微软的Windows网络编程一书,看了看,写我第一个网络程序:文件传送程序

这程序很简单,主要目的是:验证我对Winsock,select的理解,半年后写的第一个程序,练手为主原理:发送端:获取某个文件,将这文件分解,用循环将这文件发送出去;接受端:循环接受那文件,将其组合,存入某个文件里.服务端:void SendFile(){ #define PORT 34000 /// 端口 AfxSocketInit(NULL); CSocket sockSrvr;

tjwtfl的专栏 966

【连接器专题】 EIA-364 系列标准的完整列表

EIA-364 系列标准在电子工业中具有重要的地位,为电子连接器和互连系统的测试和验证提供了统一的、可操作的流程和方法,有助于提高电子产品的质量和可靠性,促进了电子工业的发展

一点硬件 2655

Windows下C网络编程入门

http://blog.csdn.net/Ackarlix/archive/2007/08/25/1758412.aspx Windows下C网络编程入门C语言的学习,一般的方式是,先学C,然后是C++,最好还要有汇编语言和微机原理基础,然后才是Visual C++。这样的方式,对学习者来说,要花费很多时间和耐力。而在学校教学中,也没有时间深入学习Windo

kanjunbao的专栏 718

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Windows下C语言网络编程快速入门

  C语言的学习,一般的方式是,先学C,然后是C++,最好还要有汇编语言和微机原理基础,然后才是Visual C++。这样的方式,对学习者来说,要花费很多时间和耐力。而在学校教学中,也没有时间深入学习Windows编程的实用技术了。  其实,具有了C语言基础后,再有一些基本的C++类的概念,就可以直接学习Windows C编程了。  一、走近Windows C语言  很多语言都把显示一个“Hell

小发猫 2595

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Windows 下建立网络项目

环境:VS2008 XP Fram3.51.Win32项目建立2.字符集3.句柄与指针区别 C语言的学习,一般的方式是,先学C,然后是C++,最好还要有汇编语言和微机原理基础,然后才是Visual C++。这样的方式,对学习者来说,要花费很多时间和耐力。而在学校教学中,也没有时间深入学习Windows编程的实用技术了。   其实,具有了C语言基础后,再有一些基本的C++类的概念

突飞猛进的专栏 449

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

入门Go语言:构建你的第一個程序

恭喜你,你已经成功地运行了你的第一个Go程序!这是学习Go语言的第一步。接下来,你可以继续探索Go的更多特性,例如并发、错误处理和网络编程等。

辅导大学生代码设计15年 381

win10 下 caffe 的第一个测试程序(附带详细讲解)

https://github.com/pglushkov/LBG_VQ/tree/master/lbg_vq_cpp

生命在于折腾! 2029

我在Linux开发板上跑的第一个Qt程序

01前言学Linux不难,难的是没有找对教程,没有人快速的带你。开发板买了之后就放在那里吃灰,看视频也看不下去,看文档又看不懂,太难了!本文以通俗易懂的方式讲一下在正点原子Linux开发板上跑一个qt程序的基本步骤,争取让初学者能够在半天的时间跑通第一个程序。硬件:正点原子 Linux mini开发板 软件:win10,vmware,ubuntu,qtcreator运行效果如下图所示,就是在正点...

张巧龙的博客 1718

如何在 Windows 上安装 MySQL(保姆级教程2024版)

我们快完成了!下一步是连接到服务器。输入 root 帐户的密码,然后单击**“检查”**。您将看到_连接成功_状态:此屏幕后面是另一个要求应用配置的屏幕。只需执行它并单击即可**Finish**。我们终于到达了最后一个屏幕。在这里您可以选择是否启动Workbench和Shell,以及检查文档或其他示例。

m0_74823658的博客 1546

3.【Windows API程序设计】第一个Windows程序:Hello Window

本文简要概括了二进制安全要学的API方向,避免浪费太多时间在没必要的API上,因为我们的目标并不是Windows程序设计师,那是操作系统厂商应该做的,另外介绍如何创建一个窗口。

2503_92964515的博客 1227

Windows网络与通信程序设计第3版配套程序:深入理解Windows网络编程的不二选择

Windows网络与通信程序设计第3版配套程序:深入理解Windows网络编程的不二选择 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 《Windows网络与通信程序设计第3版配套程序》是一套专为学习Windows平台网络与通信程序设计而打造的开源资源。由陈香凝、王烨阳等专家编写,这套程序资源为读者提供了一个实践和深入理解网络通信技术的绝佳平台。 项目技术分析 本项目...

gitblog_06710的博客 726

windows socket 网络编程

windows网络编程的初始步骤,设置环境。 WSAStartup()本函数必须是应用程序或DLL调用的第一个Windows Sockets函数.它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节.应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets

hddygs001的专栏 535

超详细Python教程——第一个python程序

Python 是著名的“龟叔” Guido van Rossum 在 1989 年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言。牛人就是牛人,为了打发无聊时间竟然写了一个这么牛皮的编程语言。现在,全世界差不多有 600 多种编程语言,但流行的编程语言也就那么 20 来种。不知道你有没有听说过 TIOBE 排行榜。

月流霜的专栏 2803

网络编程 初探windows编程

Windows 网络编程入门,了解一下基本的win32编程,环境搭建,句柄,窗口类,windows消息机制等内容

qq_61553520的博客 2809
上一篇: 阶乘最后非零位
下一篇: 五种常见的PHP设计模式[转自IBM]
foxdot
博客等级 码龄17年 27粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值