【读书笔记】TCP/IP网络编程 第2章
来源:互联网 发布:嵌入式软件开发流程图 编辑:程序博客网 时间:2024/06/06 12:50
第2.3节:windows平台下实现
函数缩写解释:
inet_addr()
inet_ntoa()
inet_aton()
a : ASCII
n : network
htons()
htonl()
ntohs()
ntohl()
h : host
n : net
s : short
l : long
INADDR_ANY :自动获取IP地址,若同一计算机有多个IP,只要端口号一致,可以从不同IP地址接收数据
服务端代码:
#include "stdafx.h"#include <winsock2.h>#include <stdio.h>#include <iostream>using namespace::std;void main(){ //加载套接字库 WSADATA wsaData; SOCKET hServSock, hClntSock; SOCKADDR_IN servAddr, clntAddr; int szClntAddr; char message[] = "Hello World!"; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)//加载库并获取库信息填至wsaData { cout << "socket start error!" << endl; return; } hServSock = socket(PF_INET, SOCK_STREAM, 0);//流式套接字,IPV4:TCP if (hServSock == INVALID_SOCKET) { cout << "socket create error!" << endl; return; } //设置地址端口 memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET;//Address Family 地址族 //servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //"inet": internet ; "n" : network ;"a" : ASCII 本地回路IP地址 字节顺序转换 servAddr.sin_addr.S_un.S_addr = INADDR_ANY; //INADDR_ANY 自动获取IP地址,若同一计算机有多个IP,只要端口号一致,可以从不同IP地址接收数据 servAddr.sin_port = htons(6000);//h:host n: net s:short l:long >> host to net short 与服务器端口一致 字节顺序转换 //套接字绑定地址端口 //第二个参数期望得到:SOCKADDR 但直接填写SOCKADDR比较麻烦,通过SOCKADDR_IN保存IPv4地址信息 if (bind(hServSock, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) { cout << "socket bind error!" << endl; return; } if (listen(hServSock, 5) == SOCKET_ERROR)//设置为监听模式,准备接收客户请求,等待连接队列的最大长度为5 { cout << "socket listen error!" << endl; return; } szClntAddr = sizeof(clntAddr); hClntSock = accept(hServSock, (SOCKADDR*)&clntAddr, &szClntAddr); if (hClntSock==INVALID_SOCKET) { cout << "socket accept error!" << endl; return; } send(hClntSock, message, sizeof(message), 0); closesocket(hClntSock); closesocket(hServSock); WSACleanup(); return ;}
客户端代码:
// TcpClient.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <winsock2.h>#include <stdio.h>#include <iostream>using namespace::std;void main(){ //加载套接字库 WSADATA wsaData;//保存套接字信息 SOCKET hSocket;//套接字句柄 SOCKADDR_IN servAddr;//保存服务器的地址信息 char message[30]; int strlen = 0; int idx = 0, readLen = 0; if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)//加载库并获取库信息填至wsaData { cout << "socket start error!" << endl; return; } //创建套接字 hSocket = socket(PF_INET, SOCK_STREAM, 0);//流式套接字,IPV4:TCP if (hSocket == INVALID_SOCKET) { cout << "socket create error!" << endl; return; } //设置地址端口 memset(&servAddr, 0, sizeof(servAddr)); servAddr.sin_family = AF_INET;//地址族 servAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//本地回路IP地址 字节顺序转换 servAddr.sin_port = htons(6000);//与服务器端口一致 字节顺序转换 //向服务器发送连接请求 if (connect(hSocket, (SOCKADDR*)&servAddr, sizeof(servAddr)) == SOCKET_ERROR) { cout << "socket connect error!" << endl; return; } while (readLen=recv(hSocket,&message[idx++],1,0)) { if (readLen == -1) { cout << "socket recive error!" << endl; return; } strlen += readLen; } printf("Message from server :%s \n", message); printf("Function read call count:%d\n", strlen); closesocket(hSocket); WSACleanup(); return;}
阅读全文
0 0
- 【读书笔记】TCP/IP网络编程 第2章
- 【读书笔记】TCP/IP网络编程 第4章 回声
- 【读书笔记】TCP/IP网络编程 第6章UDP数据传输
- 【读书笔记】TCP/IP网络编程 第7章 半关闭
- 【读书笔记】TCP/IP网络编程 第17章 Linux epoll
- 【读书笔记】TCP/IP网络编程 第18章 多线程并发
- 【读书笔记】TCP/IP 网络编程 第23章 IOCP模型
- 【读书笔记】TCP/IP网络编程 第12章 I/O复用
- 【读书笔记】TCP/IP网络编程 第14章 多播、广播
- 【读书笔记】TCP/IP网络编程 第21章 异步通知I/O模型
- 【读书笔记】TCP/IP网络编程 第22章 异步/重叠IO模型
- 【读书笔记】TCP/IP网络编程 第23章 纯重叠I/O实现回声
- 网络扫描技术揭秘读书笔记2--常用的网络编程-TCP/IP协议编程
- 网络编程--TCP-IP--2
- 《Java TCP/IP Socket编程》读书笔记(2)
- 《UNIX网络编程》读书笔记1---简介和TCP/IP
- 【读书笔记】TCP/IP网络编程 端口号问题
- 【读书笔记】TCP/IP网络编程 非阻塞模式
- [Leetcode P28] Implement strStr()(KMP算法)
- 闪耀光栅小结
- webstorm快捷键大全
- 三个数排序
- CAS 服务端登录验证流程(四)
- 【读书笔记】TCP/IP网络编程 第2章
- Max Sum
- 【PAT】【Advanced Level】1056. Mice and Rice (25)
- 面向对象设计原则(四):接口隔离原则(ISP)
- java生成6位随机数的5种方法
- ijkPlyer学习 ------ 源码导入和编译so库
- 拥塞控制的几种算法
- Linux_系统故障分析
- arcgis for javascript 表格与要素联动