TCP/IP 第1章 理解网络编程和套接字

Tcp套接字连接(一) Tcp服务端 #include <winsock2.h> #include <iostream> using namespace std; #pragma comment(lib,"ws2_32.lib") int main() { //初始化套接字库 WORD wVersion; WSADATA wsaData; int err; wVersion = MAKEWORD(1, 1); err = WSAStartup(wVersi 阅读详情

套接字的应用:

服务端:

1.socket函数创建套接字。

2.调用bind函数给套接字分配ip地址和端口号。

3.调用listen函数转为可接受请求状态。

4.调用accept函数受理连接请求

 

服务器端代码实例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
using namespace std;


void error_handling(char *message);


int main(int argc, const char * argv[])
{
	int serv_sock;
	int clnt_sock;
	struct sockaddr_in serv_addr;
	struct sockaddr_in clnt_addr;
	socklen_t clnt_addr_size;
	char mess[]="Hello Wrold!";
	if(argc!=2){
		printf("Usage : %s <port>\n",argv[0]);
		exit(1);
	}

	serv_sock = socket(PF_INET,SOCK_STREAM,0);//创建套接字

	if(serv_sock==-1) error_handling("socket() error");

	memset(&serv_addr, 0,sizeof(serv_addr));
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);//ip地址,无论哪个ip都可以连接上
	serv_addr.sin_port=htons(atoi(argv[1]));//端口号

	if(bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)//设置
		error_handling("bind() error");
	if(listen(serv_sock,5)==-1){//监听
		error_handling("listen() error");
	}

	clnt_addr_size = sizeof(clnt_addr);
	clnt_sock=accept(serv_sock, (struct sockaddr*)&clnt_addr,&clnt_addr_size);
	if(clnt_sock==-1)
		error_handling("accept() error");
	write(clnt_sock,mess,sizeof(mess));
	close(clnt_sock);
	close(serv_sock);
	return 0;
}

void error_handling(char* s)
{
	fputs(s, stderr);
	fputc('\n', stderr);
	exit(1);
}




 

 

客户端:

1.创建套接字。

2.调用connect函数向服务器端发送连接请求。

客户端代码实例:

#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);


int main(int argc, const char * argv[])
{
	int sock;
	struct sockaddr_in serv_addr;
	char message[30];
	int str_len;
	if(argc!=3){
		printf("Usage : %s <IP> <port>\n",argv[0]);
		exit(1);
	}

	sock = socket(PF_INET, SOCK_STREAM, 0);
	if(sock == -1)
		error_handling("socket() error");

	memset(&serv_addr, 0, sizeof(serv_addr));
	serv_addr.sin_family=AF_INET;
	serv_addr.sin_addr.s_addr=inet_addr(argv[1]);
	serv_addr.sin_port=htons(atoi(argv[2]));

	if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)
		error_handling("connect() error!");

	str_len=read(sock, message, sizeof(message)-1);
	if(str_len==-1)
		error_handling("read() erroe!");
	printf("Message from server : %s\n",message);
	close(sock);

	return 0;
}


void error_handling(char* s)
{
	fputs(s, stderr);
	fputc('\n', stderr);
	exit(1);
}


 

 

文件描述符:

系统分配给文件或套接字的整数,描述符从3开始以由小到大的顺序编号,因为0、1、2是分配给标准I/O的描述符。分别是

0 标准输入、1 标准输出、2 标准错误。

 

创建新文件并保存数据:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>

void error_handling(char* message);

int main(int argc, char* argv[])
{
    int fd;
    char buf[]="Hello,this is Alex";
    fd=open("data.txt",O_CREAT|O_WRONLY|O_TRUNC);
    if(fd==-1)
        error_handling("open() error!");
    printf("file descriptor: %d\n",fd);

    if(write(fd,buf,sizeof buf)==-1)
        error_handling("write() error!");

    close(fd);
        return 0;
}

void error_handling(char* message)
{
    fputs(message,stderr);
    fputc('\n',stderr);
}

 

读取文件中的数据:

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#define BUF_SIZE 100
void error_handling(char* message);

int main(int argc, char* argv[])
{
    int fd;
    char buf[BUF_SIZE];
    fd=open("data.txt",O_RDONLY);
    if(fd==-1)
        error_handling("open() error!");
    printf("file descriptor: %d\n",fd);

    if(read(fd,buf,sizeof buf)==-1)
        error_handling("read() error!");
    printf("file data: %s",buf);
    close(fd);
    return 0;
}

void error_handling(char* message)
{
    fputs(message,stderr);
    fputc('\n',stderr);
}

 

27、Python套接字与TCP/IP实战:从基础到进阶网络编程 本文从Python套接字编程基础讲起,详细介绍了套接字与TCP/IP协议的概念、应用场景及实战技巧。通过 Echo 服务器案例,生动展示了套接字在网络通信中的应用。文章还展望了网络编程的未来趋势,包括WebSocket、RESTful API、容器化与网络安全等方面。希望读者通过本文,能够掌握Python网络编程的基础知识,并在实际项目中灵活应用。 阅读详情

相关推荐

二维卡尔曼滤波位置,速度融合

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Ma...

Johnlee2019的博客 8450

《网络编程》-第1章 – 理解网络编程和套接字

第1章 – 理解网络编程和套接字 套接字( socket ):是网络数据传输用的软件设备,用来连接该网络。 1、服务器创建过程: 第一步:调用 socket 函数创建套接字。 第二步:调用 bind 函数分配IP地址和端口号。 第三步:调用 listen 函数转为可接收请求状态。 第四步:调用 accept 函数受理连接请求。 socket() 函数 #include <sys/socket.h> int socket ( int domain, int type, int protocol

GaoJuno23的博客 590

UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-4: ordinal not in range(128)

python3报错处理:UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-4: ordinal not in range(128) 一、报错场景 // 报错代码 Traceback (most recent call last): File "test_autoo3_2.py", line 214, in <module> main() File "test_autoo3_2.py",

浪里小飞侠的博客 4200

到底什么是TCP连接?

这个问题说实话困扰了我接近2年时间,我们找到的所有资料上都写着,TCP是面向连接的服务,所有要通过TCP进行通信的应用都要先建立连接才能通信,在通信完毕之后要记得关闭连接。直到前不久才突然搞明白,这里记录下来,文章写得也许不够特别准确,但是我觉得对于理解整个建立过程是足够了。结论这里先说结论,连接实际上是操作系统内核的一种数据结构,称为TCP控制块(TCB),对于linux而言是tcp_sock结构

中华胡杨的专栏 1万+

告别‘报错马拉松’:一份保姆级的Ubuntu 20.04编译OpenWrt 15.05环境配置与问题修复清单

本文提供了一份详细的Ubuntu 20.04编译OpenWrt 15.05的环境配置与问题修复指南,帮助开发者告别‘报错马拉松’。从基础环境搭建到典型报错分类与修复方案,再到高阶问题的深度修复,全面覆盖编译过程中可能遇到的各类问题,并提供自动化补丁脚本和Docker环境固化方案,确保编译过程高效顺畅。

weixin_33230433的博客 291

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors教程

Matlab安装Embedded Coder Support Package for Texas Instruments C2000 Processors

m0_69133594的博客 2822

【网络安全】复习与练习一

一、填空 1.TCP/IP协议模型中,物理层定义物理接口的机械、电气等特性,( )层将待传输的比特流划分成帧,( )层完成IP数据包的路由选择。 2.在网络中,物理层传输的数据单位称为比特,数据链路层传输的数据单位通常称为( ),网络层传输的数据单位通常称为( )。 3.用于测试到目标主机的网络是否通畅最常用的命令是( )。 4.一个TCP连接的建立,需要由( )次“握手”来完成。构成TCP连接的一对套接字,由IP和(

计算机小白努力学习 1383

ardupilot开发 --- MavLink 篇

ardupilot开发 --- MavLink 篇

记录老板的每次pua,分享领导每天的毒鸡汤... 4248

TCP实现之:套接字

TCP实现之:套接字 套接字的数据结构按照域的不同可以分为三种:用户态套接字、socket和sock,其中socket结构体是内核中的与用户态相似的套接字数据结构,可以理解为它是为用户态提供的一种接口,而sock结构体比较复杂,它是内核用来进行数据传输的数据结构,可以理解为它是套接字的实现。这三种套接字可谓息息相关。 struct socket 这里的socket又被称为BSD socket(伯克利套接字),它对应着网络模型中的表示层,其定义比较简单,只有7个字段,如下: struct socket {

qq_17045267的博客 2202

Diffusion models代码实战:从零搭建自己的扩散模型

这个系列曾经写过三篇文章专门讲代码,分别从数据集、超参数、loss设计、参数计算、Unet结构、正向过程、逆向过程等部分详细介绍了如何搭建DDPM。Diffusion models领域发展神速,最近半年代表作品有OpenAI的GLIDE、DALL-E 2,Google Brain的ImageGen,海森堡大学的Latent Diffusion。这篇博客针对入门新手讲解一下如何利用已有的资源快速搭建自己的Diffusion models。.........

沉迷单车的追风少年 1万+

手把手教你学Simulink——基于Simulink的输入输出线性化精确转矩控制

由于IOFL控制律中实时引入了当前状态的反馈(id​,iq​,ωe​),电感的变化被非线性项自动补偿,转矩仅出现微小幅度的波动(< 2%),展现出极强的参数鲁棒性。:电压方程中的耦合项(ωe​Lq​iq​和 −ωe​Ld​id​)仅通过前馈补偿,当转速 ωe​较高时,微小的前馈误差会导致显著的d-q轴电流交叉耦合;其中,ud​,uq​为定子电压,id​,iq​为定子电流,Rs​为定子电阻,Ls​为定子电感,ωe​为电角速度,ψf​为永磁体磁链,p为极对数。(步长 Ts​=10μs,即100ns?

MHD0815的博客 82

《TCP/IP网络编程》第 1 章 理解网络编程和套接字 笔记

第一章:理解网络编程和套接字 本章代码,在TCP-IP-NetworkNote中可以找到。 1.1 理解网络编程和套接字 1.1.1构建打电话套接字 以电话机打电话的方式来理解套接字。 调用 socket 函数(安装电话机)时进行的对话: 问:接电话需要准备什么? 答:当然是电话机。 有了电话机才能安装电话,于是就要准备一个电话机,下面函数相当于电话机的套接字。 #include &amp;lt;sy...

riba2534的博客 1524

智能车图像处理11-进阶篇3--中线累积差值的统计

中线累积差值的统计在后面判断小S,以及长直道的时候都有用到,关键点在于中线的跳变 第12 - 13 行:comulants1 和comlants2代表的是两种不同的累差,取的行数不同 第14-17 行:comulants2取6到25行,其实就是My_Abs(LCenter[i], LCenter[i - 1])的累加 第18-21 行:comulants1去第1到40行 第27- 行: 计算了一下右线的开始于最终结束行,这里判断R_black是否为0,是和中线的提取中g

taiyuezyh的博客 3822

《TCP/IP网络编程》第1章 理解网络编程和套接字

TCP/IP网络编程套接字相关函数服务器端客户端编译运行Linux文件操作文件描述符打开文件关闭文件写入文件读取文件文件描述符和套接字Windows套接字vs2019命令行编译相关函数服务器端客户端编译运行 套接字 相关函数 创建套接字 #include <sys/socket.h> //成功返回文件描述符,失败返回-1 int socket(int domain, int type, int protocol); 绑定IP和Port #include <sys/socket.h

yxqq378287007的博客 574

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【网络编程】网络编程 和 Socket 套接字认识

为什么需要网络编程,什么是网络编程,Socket 套接字的简要认识

bit me的博客 3069

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

《TCP/IP网络编程》课后练习答案1-14章

第一章 理解网络编程和套接字 套接字在网络编程中的作用是什么?为什么称它为套接字? P2,网络编程就是编写程序让两台联网的计算机相互交换数据。在我们不需要考虑物理连接的情况下,我们只需要考虑如何编写传输软件。操作系统提供了名为“套接字”,套接字是网络传输传输用的软件设备 socket英文原意是插座:我们把插头插到插座上就能从电网获得电力供给,同样,为了与远程计算机进行数据传输,需要连接到I...

baichaqinghuan的博客 9391

lwip-2.0.3

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

TCP/IP网络编程——理解网络编程和套接字编程

TCP/IP网络编程——1.理解网络编程和套接字编程

u011895157的博客 4755

《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字

《TCP/IP网络编程》学习笔记 | Chapter 1:理解网络编程和套接字

ProgramNovice的博客 1111

TCP/IP网络编程——习题答案

第一章 理解网络编程和套接字 (1)套接字在网络编程中的作用是什么?为什么称它为套接字? 网络编程就是编写程序让两台联网的计算机相互交换数据。在我们不需要考虑物理连接的情况下,我们只需要考虑如何编写传输软件。操作系统提供了名为“套接字”,套接字是网络传输传输用的软件设备 socket英文原意是插座:我们把插头插到插座上就能从电网获得电力供给,同样,为了与远程计算机进行数据传输,需要连接到Internet,而变成中的“套接字”就是用来连接该网络的工具 (2) 在服务器端创建套接字后,会依次调用..

杉杉coming! 8969

《TCP/IP网络编程》课后练习答案第一部分1~5章 尹圣雨

第一章 理解网络编程和套接字 套接字在网络编程中的作用是什么?为什么称它为套接字? P2,网络编程就是编写程序让两台联网的计算机相互交换数据。在我们不需要考虑物理连接的情况下,我们只需要考虑如何编写传输软件。操作系统提供了名为“套接字”,套接字是网络传输传输用的软件设备 socket英文原意是插座:我们把插头插到插座上就能从电网获得电力供给,同样,为了与远程计算机进行数据传输,需要连接到In...

KongJHong的博客 1万+

TCP/IP网络编程C01-理解网络编程和套接字

学习笔记 网络编程(套接字编程)就是编写程序使两台联网的计算机互相交换数据,而套接字就是用来连接网络的工具。 服务器端套接字 #include <sys/socket.h> int socket(int domain, int type, int protocol); // 功能:创建套接字。 // 参数:domain:采取的协议族,一般为 PF_INET;type:数据传输方式,一般为 SOCK_STREAM;protocol:一般设为 0 即可。 // 返回值:成功时返回文件描

weixin_43167385的博客 2391

TCP/IP网络编程:P1->理解网络编程和套接字

本系列文章为《TCP/IP网络编程----尹圣雨》学习笔记 文章目录 一、理解网络编程和套接字 1.1 构建接电话套接字 1.2 编写"Hello world!"服务器端 1.3 构建打电话套接字 1.4 编写"Hello world!"客户端 二、基于Linux的文件操作 2.1 将数据写入文件 2.2 读取文件中的数据 2.3 文件描述符与套接字 三、基于Windows平台的实现 3.1 为Windows套接字编程设置头文件和库 3.2 Winsock的初始化 四、基于Windows的套接字相关函数及

InnerPeaceHQ的博客 1238

TCP/IP网络编程---Linux系统下的TCP套接字编程

目录 第一章 理解网络编程和套接字 1.1 网络编程和套接字概要 1.2 基于Linux的文件操作 1.2.1 底层文件访问和文件描述符 1.2.2 打开文件 1.2.3 关闭文件 1.2.4 将数据写入文件 1.2.5 读取文件中的数据 第二章 套接字类型与协议设置 2.1 套接字协议及其数据传输特性 2.1.1 关于协议 2.1.2 创建套接字 第三章 地址族与数据序列 3.1 分配给套接字的IP地址与端口号 3.1.1 网络地址 3.1.2 用于区分套接字的端口号 3

xxyneymar的博客 4981

[Linux网络编程]Socket套接字

socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。本文归纳整理Socket的使用

weixin_44972997的博客 3671

网络编程套接字

目录 1.网络编程的基本概念 1.1服务器 1.2客户端 2.Socket套接字 2.1概念 2.2分类 3.UDP数据报套接字编程 3.1DatagramPocket API 3.2DatagramSocket API 3.3UDP实现回显服务 4.TCP流套接字编程 4.1ServerSocket API 4.2Socket API 4.3TCP实现回显服务 4.3.1用多线程进行优化 4.3.2用线程池进行优化 1.网络编程的基本概念 ①什么是网络编程: 网...

weixin_58850105的博客 2637

Socket套接字(网络编程万字总结-附代码)

开发与算法学习社区Killing Vibe的博客欢迎大家加入,一起交流学习~~如果一个进程A已经绑定了一个端口,再启动一个进程B绑定该端口,就会报错,这种情况也叫端口被占用。对于java进程来说,端口被占用的常见报错信息如下:此时需要检查进程B绑定的是哪个端口,再查看该端口被哪个进程占用。以下为通过端口号查进程的方式:在cmd输入 netstat -ano | findstr 端口号 ,则可以显示对应进程的pid。如以下命令显示了8888进程的pid在任务管理器中,通过pid查找进程。

VIBE的博客 4667
上一篇: Codeforces Round #452 (Div. 2) - F. Letters Removing(树状数组+set)
下一篇: TCP/IP 第2章 套接字类型与协议设置
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值