当前位置: 首页 > ai >正文

Windows 网络编程

编程模型
一、 基于 TCP -- 服务器
1,创建一个 socket ,用函数 socket() ;
2,绑定 IP 地址、端口等信息到 socket 上,用函数 bind() ;
3,设置允许的最大连接数,用函数 listen() ;
4,等待来自客户端的连接请求,用函数 accept() ;
5,收发数据, 用函数 send() 和 recv(),或者 read() 和 write() ;
6,关闭网络连接 (先关闭和客户端的连接,在关闭本地socket)。
    基于 TCP -- 客户端
1,创建一个 socket ,用函数 socket() ;
2,设置要连接的服务器的 IP 地址和端口等属性 ;
3,连接服务器,用函数 connect() ;
4,收发数据, 用函数 send() 和 recv(),或者 read() 和 write() ;
5,关闭网络连接 。

 二、基于 UDP -- 服务器
1,创建一个 socket,用函数 socket() ;
2,绑定 IP 地址、端口等信息到 socket 上,用函数 bind() ;
3,循环接收数据,用函数 recvfrom() , 发送数据用 sendto() 。
4,关闭网络连接。
    基于 UDP -- 客户端
1,创建一个 socket,用函数 socket() ;
2,设置对方的 IP 地址和端口等属性 ;
3,发送数据,用函数 sendto() ,接收数据用 recvfrom()  ;

4,关闭网络连接。


/*
* Copyright (c) 2014, Mr. Li
* All rights reserved.
*
* 文件名称:main.cpp
* 文件标识:网络编程
* 摘    要:Socket网络编程,UDP Sever端程序
* 其他说明:
*
* 当前版本:1.0
* 作    者:XXX
* 日    期:2014-07-30
*
* 修改记录1:
*     修改日期:
*     版 本 号:
*     修 改 人:
*     修改内容:
*
* 修改记录2:...
*/#ifdef __cplusplus
extern "C" {
#endif#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <WinSock2.h>/************************************************************************/
/* Win32 Socket依赖库                                                   */
/************************************************************************/
#pragma  comment(lib, "Ws2_32.lib")/************************************************************************/
/* 相关宏定义                                                           */
/************************************************************************/
#define trace(str)  printf(">>%s\n",str)
#define SEVER_PORT  3456/*
* 函数名称:getline
* 功    能:从终端获得一行文本。
* 输入参数:str 字符串首地址
* 输出参数:str 获得文本的首地址
* 返 回 值:获得文本的首地址
* 其他说明:
* 作    者:XXX
* 日    期:2014-07-30
*/
const char* getline(char* str)
{assert(str != NULL);const char* pstr = str;do {scanf_s("%c", str);} while (*str++ != '\n');*(--str) = '\0';return pstr;
}/*
* 函数名称:main
* 功    能:主函数
* 输入参数:
* 输出参数:
* 返 回 值:
* 其他说明:
* 作    者:XXX
* 日    期:2014-07-30
*/int main()
{WSAData lcwsadata;SOCKET lcsocket;SOCKADDR_IN lcskaddr, netskaddr;char rxtxbuf[512];int netskaddrlg = sizeof(netskaddr);memset(rxtxbuf, 0, sizeof(rxtxbuf));memset(&netskaddr, 0, sizeof(netskaddr));	memset(&lcskaddr, 0, sizeof(lcskaddr));if (0 != WSAStartup(MAKEWORD(1,1), &lcwsadata)){trace("WSAStartup error.");WSACleanup();return WSAGetLastError();}lcsocket = socket(AF_INET, SOCK_DGRAM, 0);if (lcsocket == INVALID_SOCKET){trace("socket error.");WSACleanup();return WSAGetLastError();}lcskaddr.sin_family = AF_INET;lcskaddr.sin_addr.s_addr = htonl(INADDR_ANY);lcskaddr.sin_port = htons(SEVER_PORT);if (0 != bind(lcsocket, (SOCKADDR*)&lcskaddr, sizeof(lcskaddr))){trace("bind error.");closesocket(lcsocket);WSACleanup();return WSAGetLastError();}while (0 != strcmp(rxtxbuf, "Exit")){memset(rxtxbuf, 0, sizeof(rxtxbuf));trace("Sever Recving...");if( -1 == recvfrom(lcsocket,rxtxbuf, 128, 0, (SOCKADDR*)&netskaddr, &netskaddrlg)){trace("recvfrom error.");closesocket(lcsocket);WSACleanup();return WSAGetLastError();}printf(">>Recvfrom Client : %s : %s\n", inet_ntoa(netskaddr.sin_addr), rxtxbuf);printf(">>Sever Input Responses Words : ");getline(rxtxbuf);if (SOCKET_ERROR == sendto(lcsocket, rxtxbuf, strlen(rxtxbuf)+1, 0,(SOCKADDR*)&netskaddr, netskaddrlg)){trace("sendto error.");closesocket(lcsocket);WSACleanup();return WSAGetLastError();}		}closesocket(lcsocket);WSACleanup();return 0;
}#ifdef __cplusplus
};
#endif
/*
* Copyright (c) 2014, Mr. Li
* All rights reserved.
*
* 文件名称:main.cpp
* 文件标识:网络编程
* 摘    要:Socket网络编程,UDP Client端程序
* 其他说明:
*
* 当前版本:1.0
* 作    者:XXX
* 日    期:2014-07-30
*
* 修改记录1:
*     修改日期:
*     版 本 号:
*     修 改 人:
*     修改内容:
*
* 修改记录2:...
*/
#ifdef __cplusplus
extern "C" {
#endif#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <WinSock2.h>/************************************************************************/
/* Win32 Socket依赖库                                                   */
/************************************************************************/
#pragma  comment(lib, "Ws2_32.lib")/************************************************************************/
/* 相关宏定义                                                           */
/************************************************************************/
#define trace(str)  printf(">>%s\n",str)
#define SEVER_PORT  3456
#define SEVER_IP_ADDR "192.168.5.62"/*
* 函数名称:getline
* 功    能:从终端获得一行文本。
* 输入参数:str 字符串首地址
* 输出参数:str 获得文本的首地址
* 返 回 值:获得文本的首地址
* 其他说明:
* 作    者:XXX
* 日    期:2014-07-30
*/
const char* getline(char* str)
{assert(str != NULL);const char* pstr = str;do {scanf_s("%c", str);} while (*str++ != '\n');*(--str) = '\0';return pstr;
}/*
* 函数名称:main
* 功    能:主函数
* 输入参数:
* 输出参数:
* 返 回 值:
* 其他说明:
* 作    者:XXX
* 日    期:2014-07-30
*/
int main()
{WSAData lcwsadata;SOCKET lcsocket;SOCKADDR_IN netskaddr;char rxtxbuf[256];int netskaddrlg = sizeof(netskaddr);memset(rxtxbuf, 0, sizeof(rxtxbuf));memset(&netskaddr, 0, sizeof(netskaddr));if (0 != WSAStartup(MAKEWORD(1,1), &lcwsadata)){trace("WSAStartup error.");WSACleanup();return WSAGetLastError();}lcsocket = socket(AF_INET, SOCK_DGRAM, 0);if (lcsocket == INVALID_SOCKET){trace("socket error.");WSACleanup();return WSAGetLastError();}netskaddr.sin_family = AF_INET;netskaddr.sin_addr.s_addr = inet_addr(SEVER_IP_ADDR);netskaddr.sin_port = htons(SEVER_PORT);while (0 != strcmp(rxtxbuf, "Exit")){memset(rxtxbuf, 0, sizeof(rxtxbuf));printf(">>Client Input send Words : ");if (0 == strcmp(getline(rxtxbuf), "Exit")){break;}if (SOCKET_ERROR == sendto(lcsocket, rxtxbuf, strlen(rxtxbuf)+1, 0,(SOCKADDR*)&netskaddr, netskaddrlg)){trace("sendto error.");closesocket(lcsocket);WSACleanup();return WSAGetLastError();}memset(rxtxbuf, 0, sizeof(rxtxbuf));trace("Client Recving...");if( -1 == recvfrom(lcsocket,rxtxbuf, 128, 0, (SOCKADDR*)&netskaddr, &netskaddrlg)){trace("recvfrom error.");closesocket(lcsocket);WSACleanup();return WSAGetLastError();}printf(">>Recvfrom Client : %s : %s\n", inet_ntoa(netskaddr.sin_addr), rxtxbuf);}closesocket(lcsocket);WSACleanup();return 0;
}#ifdef __cplusplus
};
#endif




http://www.xdnf.cn/news/11208.html

相关文章:

  • excel量化交易模板_量化平台果仁网为什么能赢?
  • 冒险岛开服服务端教程自己搭建服务器需要那些东西
  • 7个免费网络服务器系统推荐,分省多线路智能DNS系统wddns 1.7发布
  • 医学影像篇
  • jemter java请求后置_jmeter完成一个java请求-本机调用
  • 搭建邮件服务器的速成指南合集
  • Iframe 用法的详细讲解
  • ZineMaker制作电子书相关
  • Win8大百科第14期:各版发布时间及安装
  • 如何采用WOPI协议将Office整合到自己项目中
  • 《汇编语言》——王爽 第十章及实验十子程序设计笔记
  • ei学术会议中心官网——别被取名忽悠!
  • 042:vue+openlayers实现canvas遮罩效果(代码示例)
  • 403 Forbidden错误的原因和解决方法
  • 2022我的校招求职历程
  • (转)建站知识:域名/ 空间/ IP/ 端口之间的关系
  • dom模板列表-2
  • 花了N天,截取Office2003菜单工具条的140个图标(16×16)与大家分享
  • 分享124个ASP源码,总有一款适合您
  • FTP工具 CuteFTP Pro使用方法
  • 外挂制作全过程
  • 多线程技术的概述
  • fireworks 投影_使用Fireworks MX 2004进行Flash图形和界面设计
  • 谷歌广告联盟(Google Adsense)通过网站获利功能在线创收
  • oracle record 类型,Oracle记录类型(record)和%rowtype
  • 计算广告所谓的计算,到底在计算什么
  • 两款工控控件对比评测:Iocomp和ProEssentials
  • Windows中DLL文件基本原理及修改方法
  • 开美股账户过程
  • Delphi DataSnap 流程分析(二)