TCPIP网络编程 学习笔记_1 --网络编程入门
来源:http://www.tudoupe.com时间:2022-04-09
前言: 本程序示例序列以 Xcode 书写 。MacOSX,这是一个基于 UNIX 的操作系统。因此,用Linux编写的网络编程代码通常可以直接在Xcode上发布。如果您想要切换到 Windows, 您只需要做一些修改 。本章将介绍Windows 的更改。
网络编程和套接字
互联网编程与阅读电脑网页相当相似。通俗地讲,建造两个联网计算机之间数据交换方案称为网络编程。那么,你如何发送数据?实际上,操作系统将有一个称为“设置”的部件,称为“设置”。袜子只是可以将数据传送到网络的软件设备。即使你对互联网数据传输的基本原理不熟悉您也可以通过合成方式发送数据。因此,网络方案拟订也称为综合方案拟订。
现在我们有了一个共同的例证 说明什么是合成 以及合成是如何产生的。实际上,这一程序与我们的电话系统的运作方式相同。通过固定电话网络交换语言数据的工作由电话机完成。这里有一个和我们的密码相似的电话网格与互联网类似。而且,好像电话是打电话或接听的一样,袜子也可以给予或接受。让我们从发送给我们的套接字创建程序开始:
首先,你首先必须做什么才能打电话?当然,你必须有一个电话。建立一个与电话机功能相似的套房,如下:int socket(int domain, int type, int protocol);
2 当您设置了电话时, 您必须考虑拨打电话号码, 以便其他人可以联系您。 袜子是一样的; 使用下面的功能来设置一个像样的脚手架配置地址信息( IP 地址和端口号) 。
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
第三,在前两个阶段之后,需要连接电话线,等待通话。一旦连接电话线,电话就会变成一个可以负责的状态,届时,另一个人可以提出与机器连接的请求。同样,插座必须转换成可以接收连接的条件。
int listen(int sockfd, int backlog);
4 如果有人打电话,铃声会响,电话会响起来,然后才能被接听。袜子是一样的,如果为了完成数据传输而寻找连接,会呼叫以下接收功能。
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
提出和综合网络连接请求的过程描述如下:
要开始, 请使用套接字功能构建套接字 。
第2步:使用约束功能指定IP地址和端口号。
第三部分:为了接受请求状态,使用监听功能。
第4步:为了接收连接请求,请调用接受方法。只需回答电话,即接受服务,并讨论电话,即提供服务。这是一个直截了当的两步过程:1. 援引套接字功能创建套接字。2. 2 向服务端提交连接请求,使用连接功能。
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);
Linux 的文件管理
首先,为什么我们在Linux上讨论文档操作?既然Linux上的套接字动作与文件操作完全相同,套接字也被视为Linux的文件。
应当指出,Linux C语言汇编者海合会在此没有使用。
2,系统自动分配给文件或软件包的编号被称为文件描述符。以下是我们如何解读的另一个例子:假设学校有一个印刷室。要复印有关文件,只需打一次电话即可。有一位同学,经常打电话要复印这样个内容:“<<关于随着高度信息化社会而逐渐提升地位的触觉,知觉,思维,性格,智力等人类生活质量相关问题特性的人类学研究>>这篇论文第26页到30页”。终于有一天,印刷室里的人真的很不自在于是,印刷厂的工人和一名同学说, " 以下论文作为No. " 发表。因此你将协助我 复制第18篇论文的第26至30页"在该例中,印刷室与操作系统相对应。同学跟编码员差不多论文编号与文件描述符相同。这些文件与文件或综述相同。也就是说,当您创建文件或套接字时,操作系统会自动返回整数给我们 。文件说明用这个编号表示。这是文件或套接字创建的别名 。方便称呼而已。
在 Windows 上,文档描述也称为控件。
3. Linux文件或包件操作:
打开文件:
int open(const char *path, int flag); –> (Linux上对应socket(…)函数)
关闭文件或套接字:
int close(int fd); –>(Windows上对应closesocket(SOCKET S)函数)
将数据写入文件或发送数据 :
ssize_t write(int fd, const void *buf, size_t nbytes);
文件的数据应读取或接收:
ssize_t read(int fd, void *buf, size_t nbytes);
注释: size_t = untign in, size_t = untign in, size_t = untign in, size_t = untign in, size_t = untign in, size_t = untign in, size_实际上,它们是按类型def申报的。对于简单数据类型,只提供别名。因为已经有一个基本的数据类型,那为什么要给它一个别名呢?因为它现在被普遍假定为 32 个地点。此外,在以前的16位数操作系统中,int是16位的。根据系统的不同,时代的变化,基础数据类型的表现也发生了变化。如果为基本数据类型指定了别名,以后要修改,这只是一个需要修改的类型声明。这将导致大量减少对代码的修改。
基于视窗的平台实施
1 由于Windows以UNIX BSD系列为基础,许多区域与Linux相似,因此,只需更新Linux环境中开发的网络软件的一部分,即可在Windows平台上运行。
2 如前所述,Linux上的文件操作与合成操作相似,但Windows上的 I/O 函数与 IP/O 函数不同。
Winsock 的数据传输函数 :
int send(SOCKET s, const char *buf, int len, int flags);
Winsock 的数据收集功能 :
int recv(SOCKET s, const char *buf, int len, int flags);
Windows和Linux之间的区别在于Windows要求Winsock图书馆在退出Winsock相关图书馆之前先启动。
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
第一个参数是Winsock有很多版本。应编制WORD类型(WORD是类型def声明的未签名版本)的软件包信息。若版本为1.2,第一版的号码是其中之一。2是副版本号,应该给出 0x0201 值 。高8位为副版本号,低8位为主版本号。我们还可以直接利用宏观。MakeWORD(1,2); // 初级版本1。副版本为2,返回0x0201。
WASADATA型结构变量的地址是第二个参数。
Winsock 图书馆初始化:
温索克图书馆出狱后必须获得自由:
在 WSACleanup 中( 无效); // 成功返回 0 并且没有返回 SOCKET_ ERROR
Linux 代码样本
服务端:
//
// main.cpp
// hello_server
//
// Created by app05 on 15-7-6.
2015年,所有法定权利均保留。
///*
第一,Argv[ ] 承认它只有一个参数: 程序名称, 所以如何手工添加参数? 首先, 让我们来澄清一下 。
添加参数来使用命令行参数, 即使该参数稍后会更改; 仅设置在编译器工具中 。
没有必要更新代码, 例如 。 端口的设置
2,在Xcode中给程序提供命令行参数步骤:Product菜单–>Scheme–>Edit Scheme–>Run–>Arguments–>+添加
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>void error_handling(char *message)
{
fputs(message, stderr);
fputc(’
', stderr);
exit(1);
}int main(int argc, const char * argv[]) {
int serv_sock;
int clnt_sock;", argv[0]);
exit(1);
}}
客服端:
//
// main.cpp
// hello_client
//
// Created by app05 on 15-7-6.
2015年,所有法定权利均保留。
///*
1 如果服务器和客户是同一台机器,可输入IP地址如下:
如果服务端计算机不是在同一台计算机上,则应填写服务端计算机的IP地址。
2 先运行服务端软件,然后是客户-服务器程序。
*/#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>void error_handling(char *message)
{
fputs(message, stderr);
fputc(’
', stderr);
exit(1);
}int main(int argc, const char * argv[]) {
int sock;
struct sockaddr_in serv_addr;
char message[30];
int str_len;", argv[0]);
exit(1);
}", message);
close(sock);}

相关新闻
- 2022-08-04 WPF的由来
- 2022-08-04 Win11勒索软件防护怎么打开?Win11安
- 2022-08-04 Windows系统jdk的配置
- 2022-08-04 Windows10 OneNote怎么重新登录?如何重
- 2022-08-04 超好用的 Windows 效率工具推荐
- 2022-08-04 Windows如何在CMD或PowerShell中配置代理
- 2022-08-04 powershell和cmd对比
- 2022-08-04 【QT】Windows下QT下载安装
- 2022-08-04 windows下 C++ 实现类属性的get和set方
- 2022-08-04 Win11快速助手在哪里?Win11打开快速
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
