网络编程小结

1.套接字(句柄)

2.数据初始化

memset(&_mDataOfCfg, 0, sizeof(_mDataOfCfg));

3.文件目录(当前工作目录)

const char ConfigFile[]= "..\\Debug\\config.cfg";

4.网络地址(网络字节序)

htons() 把unsigned short类型从主机序转换到网络序;
htonl() 把unsigned long类型从主机序转换到网络序;
ntohs() 把unsigned short类型从网络序转换到主机序;
ntohl() 把unsigned long类型从网络序转换到主机序。

SOCKADDR_IN addr;
addr.sin_family=AF_INET;
addr.sin_port = htons(5000);
addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");

addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

5.string转const char*

string s;
char * ch;
ch = s.c_str();

6.TCP全流程(通信启动顺序)

(1).服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket

(2).服务器为socket绑定ip地址和端口号

(3).服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开

(4).客户端创建socket

(5).客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket

(6).服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求,客户端连接成功,向服务器发送连接状态信息,服务器accept方法返回,连接成功

(7).客户端向socket写入信息

(8).服务器读取信息

(9).客户端关闭

(10).服务器端关闭

>>>>>代码实现过程详解:

(1S)WSAStartup(MAKEWORD(2, 2), &wsaData)

(2S)服务端_SocketS = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)

(3S)服务端bind(_SocketS,(struct sockaddr *)&_Addr【服务端地址】, sizeof(_Addr))

(1C)客户端 _mSocketC = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)

(4S)服务端_SocketC = accept(_SocketS,(struct sockaddr *)&_ClientAddr1【获得客户端地址】, &_AdrLen)【用作处理多客户端并发时可循环】

(2C)客户端 connect(_mSocketC,(struct sockaddr *)&_Addr【服务端地址】, sizeof(_Addr))

(3C)客户端 send(_mSocketC,(char*)&_mControlToPrisse,sizeof(_mControlToPrisse),0)       【循环】

(5S)服务端 recv(_SocketC ,(char*)&_mControlToPrisse,sizeof(_mControlToPrisse),0)          【循环】

7.UDP通信流程

(1S)WSAStartup(MAKEWORD(2, 2), &wsaData)

(1C)客户端 _mSocketC = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)

(2C)客户端 sendto(_mSocketC,(char*)&_mControlToPrisse,sizeof(_mControlToPrisse),0,(sockaddr*)&_Addr服务端地址, sizeof(_Addr))       【循环】

(2S)服务端_SocketS = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)

(3S)服务端bind(_SocketS,(struct sockaddr *)&_Addr【服务端地址】, sizeof(_Addr))

(4S)服务端 recvfrom(_SocketC ,(char*)&_mControlToPrisse,sizeof(_mControlToPrisse),0,(sockaddr*)&_Addr服务端地址, sizeof(_Addr))          【循环】


8.线程函数

#include <Windows.h>
DWORD WINAPI _threadR(LPVOID lpParameter){ ……}

//start thread
DWORD thread_hnd;
HANDLE ThreadR = CreateThread(NULL,0,_threadR,NULL,0,&thread_hnd);

//close thread
CloseHandle(ThreadR);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值