【计算机网络】网络编程---TCP套接字(一)

Python 网络编程 TCP/UDP 详细基础 1 基础概念 1.1 Linux Windows 命令行查看网络信息 Linux: ifconfig windows: ipconfig 开/关网卡:sudo ifconfig ###(网卡名) up/down 1.2 IP地址 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。 IP地址即在网络中标识一台. 阅读详情

预备知识


socket(套接字):IP地址+端口号。可唯一标识网络通信中的一个进程。
单单只有端口号只能标识是这台主机上的唯一进程。那端口号都有哪些分类呢?
计算机端口可分为3大类:
1) 公认端口(Well Known Ports):从0到1023,它们紧密绑定于一些服务。通常这些端口的通讯明确表明了某种服 务的协议。例如:80端口实际上总是HTTP通讯。21端口是FTP服务。

 2) 注册端口(Registered Ports):从1024到49151。它们松散地绑定于一些服务。也就是说有许多服务绑定于这些端口,这些端口同样用于许多其它目的。例如:许多系统处理动态端口从1024左右开始。

 3) 动态和/或私有端口(Dynamic and/or Private Ports):从49152到65535。理论上,不应为服务分配这些端口。实际上,机器通常从1024起分配动态端口。但也有例外:SUN的RPC端口从32768开始。
 
使用
TCP与UDP段结构中端口地址都是16比特,可以有在0—65535范围内的端口号。对于这65536个端口号有以下的使用规定:
(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1—1023之间的端口号,是由ICANN来管理的;
(2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;
(3)大多数TCP/IP实现给临时端口号分配1024—5000之间的端口号。大于5000的端口号是为其他服务器预留的。

TCP套接字编程

服务器端源码:

#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int startup(const char* ip,int port)  //创建监听套接字
{
    int sock=socket(AF_INET,SOCK_STREAM,0);//建立服务器端socket
    if(sock<0)
    {
        perror("socket");
        exit(1);
    }
    struct sockaddr_in server;
    server.sin_family=AF_INET;
    server.sin_addr.s_addr=inet_addr(ip);
    server.sin_port=htons(port);
    socklen_t len=sizeof(server);
    if(bind(sock,(struct sockaddr*)&server,len)<0)// 将套接字绑定到服务器的网络地址上
    {
        perror("bind");
        exit(2);
    }
    if(listen(sock,5)<0)// 建立监听队列
    {
        perror("listen");
        exit(3);
    }
    return sock;
}


int main(int argc,char* argv[])
{
    if(argc!=3)
    {
        printf("Use way:%s,[IP],[port]\n",argv[0]);
        return -1;
    }
    int listen_sock=startup(argv[1],atoi(argv[2]));
    struct sockaddr_in remote;
    socklen_t relen=sizeof(remote);
    while(1)   //接收连接
    {
        int ret=accept(listen_sock,(struct sockaddr*)&remote,&relen);     // 等待客户端连接请求到达
        if(ret<0)
        {
            perror("accept");
            continue;
        }   
        printf("client's ip is %s,port is %d\n",inet_ntoa(remote.sin_addr),ntohs(remote.sin_port));

        char buf[1024];
        while(1)
        {
            int s=read(ret,buf,sizeof(buf)-1);  // 接收客户端数据
            if(s>0)
            {
                buf[s]='\0';
                printf("client#:%s\n",buf);
            }
            else
            {
                printf("client if quit!\n");
                break;
            }
        }
        close(ret);
    }
    return 0;
}

客户端源码:

#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc,char* argv[])
{
    if(argc!=3)
    {
        printf("use way is %s,[ip],[port]\n",argv[0]);
        return -1;
    }
    int sock=socket(AF_INET,SOCK_STREAM,0);// 建立客户端socket
    if(sock<0)
    {
        perror("socket");
        exit(1);
    }
    struct sockaddr_in server;  // 服务器端网络地址结构
    server.sin_family=AF_INET;
    server.sin_addr.s_addr=inet_addr(argv[1]);
    server.sin_port=htons(atoi(argv[2]));
    socklen_t len=sizeof(server);
    // 与远程服务器建立连接  
    if(connect(sock,(struct sockaddr*)&server,len)<0)
    {
        perror("connect");
        exit(2);
    }
    char buf[1024];
    while(1)
    {
        printf("send#:");
        fflush(stdout);
        int s=read(0,buf,sizeof(buf)-1);
        if(s>0)
        {
            buf[s-1]='\0';
            write(sock,buf,s);
        }
    }
    close(sock);
    return 0;
}

运行程序时,会发现一个现象,当先ctrl+c掉服务器进程时,再次启动服务器进程会出现bind: Address already in use的错误提示。
错误原因如下:
bind 试图绑定一个已经在使用的端口。该陷阱也许没有活动的套接字存在,但仍然禁止绑定端口(bind 返回 EADDRINUSE),它由 TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到 4 分钟(2MSL)。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。
那如果正在开发一个套接字服务器,就需要停止服务器来做一些改动,然后重启,这种情况就比较麻烦了。但是是有解决方法的:给套接字应用 SO_REUSEADDR 套接字选项,以便端口可以马上重用。
服务器进程修改如下:

#include<stdio.h>
#include<sys/types.h>
#include<stdlib.h>
#include<sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int startup(const char* ip,int port)  //创建监听套阶字
{
    int sock=socket(AF_INET,SOCK_STREAM,0);
    if(sock<0)
    {
        perror("socket");
        exit(1);
    }
    struct sockaddr_in server;
    server.sin_family=AF_INET;
    server.sin_addr.s_addr=inet_addr(ip);
    server.sin_port=htons(port);
    socklen_t len=sizeof(server);
    int on=1;  
    if((setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)))<0)
    {  
         perror("setsockopt");  
         exit(4);  
    }  
    if(bind(sock,(struct sockaddr*)&server,len)<0)
    {
        perror("bind");
        exit(2);
    }
    if(listen(sock,5)<0)
    {
        perror("listen");
        exit(3);
    }
    return sock;
}


int main(int argc,char* argv[])
{
    if(argc!=3)
    {
        printf("Use way:%s,[IP],[port]\n",argv[0]);
        return -1;
    }
    int listen_sock=startup(argv[1],atoi(argv[2]));
    struct sockaddr_in remote;
    socklen_t relen=sizeof(remote);
    while(1)   //接收连接
    {
        int ret=accept(listen_sock,(struct sockaddr*)&remote,&relen);
        if(ret<0)
        {
            perror("accept");
            continue;
        }   
        printf("client's ip is %s,port is %d\n",inet_ntoa(remote.sin_addr),ntohs(remote.sin_port));

        char buf[1024];
        while(1)
        {
            int s=read(ret,buf,sizeof(buf)-1);
            if(s>0)
            {
                buf[s]='\0';
                printf("client#:%s\n",buf);
            }
            else
            {
                printf("client if quit!\n");
                break;
            }
        }
        close(ret);
    }
    return 0;
}

此时再次运行程序,先ctrl+c掉服务器进程,然后再次运行不会再报错。

你也许会发现,服务器在创建套接字之后使用了bind函数将sockfd这个⽤于⽹络通讯的⽂件描述符监听myaddr所描述的地址和端口号绑定在一起。而客户端进程并没有bind。
这是因为,客户端通过调用connect函数在socket数据结构中保存本地和远端信息,无须调用bind(),因为这种情况下只需知道目的机器的IP地址,而客户通过哪个端口与服务器建立连接并不需要关心,socket执行体为你的程序自动选择一个未被占用的端口,并通知你的程序数据什么时候打开端口。

【嵌入式开发之网络编程】Socket套接字及TCP、UDP通信的实现 是计算机网络的各层及其协议的集合,就是这个计算机网络及其构件所应完成的功能的精确定义(不涉及实现)。是遵循这种体系结构的前提下,用何种硬件或软件完成这些功能的问题。 阅读详情

相关推荐

Socket 套接字及TCP的实现框架

本文介绍了网络体系结构的两种形式:体系结构定义网络各层功能,而实现则涉及具体硬件/软件的选用。重点讲解了网络编程中的套接字接口,包括socket()、bind()、listen()、accept()等核心API函数的使用方法,以及IPv4/IPv6地址结构体的差异。文章还分析了三种套接字类型(流式、数据报、原始套接字)的特点,阐述了网络通信的三元组要素(IP地址、端口、协议)。最后详细说明了TCP通信的实现过程,包括建立连接(socket-bind-listen-accept)、数据传输(read/writ

qq_47638391的博客 1093

Linux | 套接字(socket)编程 | TCP协议讲解 | 通信模型搭建

传输层协议编写:TCP通信,关于涉及到的接口介绍,通信模型搭建过程的详解

凡事都是靠练习 1564

TCP套接字编程

TCP套接字编程——网络编程综合性试验介绍

使用套接字创建连接 --- TCP

一.服务端的连接准备 1.创建套接字 int socket(int domain, int type, int protocol) domain : PF_INET, PF_INET6以及PF_LOCAL等,表示什么类型的套接字 type: .SOCK_STREAM:表示字节流,TCP .SOCK_DGRAM :表示数据报,UDP .SOCK_RAW ...

Tobiubiu 1974

系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

系统-等保三级-CentOS Linux 7合规基线检查 shell脚本

swindy博客 2405

手把手带你搭建一个语音对话机器人:5分钟定制个人AI小助手

通过本文的简单步骤,你已经掌握了如何用 Python 搭建一个语音对话机器人。我们使用了实现语音识别,利用 OpenAI API 生成对话内容,并通过gTTS将文本转换为语音。整个流程非常简洁,你可以根据自己的需求进一步扩展机器人功能,甚至将其集成到实际的应用场景中。

小蜗牛的珍贵百宝箱 4802

【操作系统】Linux之网络编程(TCP)(头歌作业)

第1关:TCP套接字创建与端口绑定 第2关:TCP监听与接收连接 第3关:TCP连接的建立与终止 第4关:TCP数据传送

weixin_74154742的博客 1267

7系列ZYNQ硬件调试:Vitis无法识别ARM DAP的排查与解决

本文详细分析了Xilinx 7系列ZYNQ芯片在Vitis开发环境中无法识别ARM DAP的常见问题及解决方案。从硬件设计检查(电源系统、时钟电路)、JTAG连接诊断到软件环境排查,提供了全面的调试指南。特别针对ARM DAP初始化失败的情况,给出了实用的排查步骤和预防措施,帮助开发者快速定位和解决类似问题。

weixin_33737134的博客 512

Python零基础到精通-高级篇

【图片下载※】 importurllib.requestasreq if__name__=='__main__': #**********begin*********# webpage=req.urlopen('http://www.gotonudt.cn/site/gfkdbkzsxxw/resources/img/logo.png') webdata=webpage.read() img=open('img/logo...

m0_49013185的博客 4021

FPGA实战:用Verilog实现Costas环载波同步(附Vivado2019.2仿真步骤)

本文详细介绍了如何在FPGA上使用Verilog实现Costas环载波同步,包括核心原理、Vivado2019.2工程配置、代码实现及仿真验证。通过正交下变频、相位误差检测和环路滤波等关键模块的设计,帮助开发者掌握数字通信系统中的载波同步技术,并提供了实用的调试和优化技巧。

k0l1m2n3o的博客 133

DSSAT模型实战:从基础配置到气候情景模拟

本文详细介绍了DSSAT模型在农业模拟中的应用,从基础配置到气候情景模拟的全流程实战指南。通过土壤-植物-大气连续体的动态关系建模,DSSAT能精准预测作物产量,误差率低至8%。文章涵盖气象数据处理、土壤参数配置、管理措施调控等核心技巧,并提供了Python脚本和可视化方法,助力农业科研与决策。

weixin_29264201的博客 1009

C++网络编程(一):TCP套接字编程

目录TCP服务器端的默认函数调用顺序TCP客户端的默认函数调用情况TCP网络编程主要流程 TCP服务器端的默认函数调用顺序 int Socket( int domain, int type,int protocol) 功能:创建一个新的套接字,返回套接字描述符 参数说明: domain:域类型,指明使用的协议栈,如TCP/IP使用的是 PF_INET ,其他还有AF_INET6、AF_UNIX type:指明需要的服务类型, 如 SOCK_DGRAM:数据报服务,UDP协议 SOCK_S

weixin_44164489的博客 4589

APM无人船测绘实战:从RTK、测深仪到图传的完整系统集成指南

本文提供了一套完整的APM无人船测绘系统集成实战指南。从RTK模块配置、测深仪数据同步到图传系统接入,详细解析了硬件选型、接线、软件参数调试及QGC地面站任务规划的全流程,旨在帮助用户将分散的部件整合为可自主执行水下地形测绘的可靠工具。

rr23456的博客 519

【计算机网络原理】网络编程和Socket套接字

是指网络上的主机,通过不同的进程以编程的⽅式实现⽹络通信.当然,我们也可以是在一台主机,只要是在不同的进程中,就可以通过网络通信来传输资源,不一定需要在多台主机上实现.同时并不代表只能是从进程B到进程A,而是从发送方,到接收方进程A可以是发送方,也可以是接收方,进程B同理.2.网络编程中的基本概念1.发送端 vs 接收端在⼀次⽹络数据传输时:数据的发送⽅进程,称为发送端。发送端主机即⽹络通信中的源主机。数据的接收⽅进程,称为接收端。接收端主机即⽹络通信中的⽬的主机。

xiaoxie8023的博客 2339

Android加密开发实战:Spongy Castle集成与国密算法应用指南

在移动应用开发中,数据加密是保障用户隐私和信息安全的基石。其原理基于密码学算法,通过对数据进行编码转换,确保即使数据被截获也无法被未授权方解读。这项技术的核心价值在于为敏感信息提供机密性、完整性和身份验证,广泛应用于用户登录、本地存储、网络通信等场景。对于Android开发者而言,系统自带的加密功能有时无法满足需求,特别是涉及国密算法或更丰富算法套件时。本文聚焦于Spongy Castle这一专为Android定制的加密库,它有效解决了与系统内置Bouncy Castle的兼容性问题,并提供了对SM4等国密

weixin_27722377的博客 306

AI应用架构师实战:高等教育智能课程推荐系统开发

性能:选课季并发量达1000QPS,推荐响应时间≤500ms(否则学生不耐烦)。数据隐私:符合《教育数据安全管理规范》,学生姓名、学号等敏感信息需匿名化存储。可扩展性:支持新增课程类型(如MOOC、实践课)、新增数据源(如竞赛获奖记录)。教育AI要“以教为中心”:不能纯技术驱动,要和教育工作者深度合作(如教师参与定义课程的前置关系)。数据是核心:数据质量决定推荐效果,要重视数据治理和隐私保护。持续迭代:教育需求是动态的(如每年新增课程、学生目标变化),要定期收集用户反馈,更新模型和策略。张三。

AI大模型应用之禅 1347

计算机网络---网络编程套接字(二)

✨计算机网络 — 网络编程套接字之TCP套接字编程 作者介绍: 🎓作者:偷偷敲代码的青花瓷🐱‍🚀 👀作者的Gitee:代码仓库 📌系列文章推荐: ✨1.计算机网络 ——网络原理之初识 ✨2.计算机网络—网络编程套接字(一) ✨✨我和大家一样都是热爱编程✨,很高兴能在此和大家分享知识,希望在分享知识的同时,能和大家一起共同进步,取得好成绩🤳,今天大家进入网络编程的新章节,如果有错误❌,欢迎指正哟😋,咋们废话不多说,跟紧步伐,开始学习吧~😊 前言: 前面给大家介绍了计算机网络—网络编程套接字之UDP

Biteht的博客 5420

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【Linux网络】Linux网络编程套接字,UDP与TCP

在当今这个信息技术日新月异的时代,网络编程已成为连接世界、构建各类互联网应用不可或缺的一部分。而Linux,作为开源操作系统的典范,其强大的网络功能和灵活性,为开发者们提供了一个广阔而深入的实践平台。在众多网络编程技术中,套接字(Socket)编程无疑是核心与基石,它不仅支撑着Web服务、即时通讯、在线游戏等日常应用,还是实现分布式系统、云计算服务的关键技术之一。

EterNity_TiMe_的计算机学习之路 5618

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

计算机网络详解--套接字编程

计算机网络详解--套接字编程

chenchenchencl的博客 6578

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机网络 --- 网络编程

1. 网络编程 1.1 什么是网络编程 网络编程 : 指网络上的主机,通过不同的进程,以编程的方式实现网络通信. 简单来说: 网络编程就是通过代码的方式来控制不同进程间能够进行数据交互. 1.2 发送端和接收端 发送端:数据的发送方进程,称为发送端。发送端主机即网络通信中的源主机。 接收端:数据的接收方进程,称为接收端。接收端主机即网络通信中的目的主机。 收发端:发送端和接收端两端,也简称为收发端 1.3 请求和响应 请求(Request) : 客户端给服务端发送的数据 响应(Response) : 服务端

wwzzzzzzzzzzzzz的博客 9917

什么是网络编程(一)

1.什么是网络、计算机网络的构成是什么?   在计算领域中,网络是传输信息、接受、共享的虚拟的平台。   通过它可以把各个点、面、体的信息联系到一起,从而实现这些资源的共享。  网络是人类发展史上最重要的发明,提高了人类和科技的一个发展。 2.什么是网络编程? 网络编程从大的方面就是说对信息的发送接收。 通过操作相应API调度计算机资源硬件,并且利用管道(网线)进行数据交互的过程。...

折腾java的博客 5万+

计算机网络---网络编程套接字(一)

文章目录Socket套接字概念分类UDP数据报套接字编程Java中UDP套接字编程步骤DatagramSocket APIDatagramSocket 的构造方法:DatagramSocket 的常用方法:DatagramPacket APIDatagramPacket 的构造方法DatagramPacket 的常用方法代码实例以及详细图文解析实例1:回显服务实例2:英译汉 Socket套接字 概念 Socket套接字,是由系统提供用于网络通信的技术,是基于TCP/IP协议的网络通信的基本操作单元。基.

Biteht的博客 4962

【计算机网络】网络编程套接字之TCP套接字——含超详细代码注释

网络编程套接字之TCP套接字—含超详细代码注释!!

潘潘的博客 1755

网络编程套接字

网络编程中的套接字(Socket)是不同主机间进程通信的核心技术,主要分为面向连接的TCP套接字和无连接的UDP套接字。TCP通过ServerSocket建立可靠连接,使用字节流传输数据,需要注意消息边界问题;而UDP通过DatagramSocket发送独立的数据包,效率更高但不保证可靠性。无论是哪种方式,关键都在于正确管理连接生命周期、处理IO异常,以及设计明确的应用层协议来规范数据格式和传输规则。在实际开发中,套接字编程需要特别注意资源释放、线程安全以及网络异常处理。

m0_64725370的博客 1234

计算机网络(二) | 网络编程基础、Socket套接字、UDP和TCP套接字编程

网络编程、Socket套接字

m0_60631323的博客 2180

【Linux】网络编程套接字Socket:TCP网络编程

TCP(传输控制协议)和UDP(用户数据报协议)是计算机网络中最常用的两个传输层协议,它们各自具有不同的特性和优势。以下是TCP的主要特性以及与UDP的区别。TCP和UDP各有优缺点,选择使用哪种协议取决于应用场景的需求。如果需要可靠性和顺序保证,TCP是更合适的选择;而如果应用对速度和效率要求较高,可以接受数据丢失,UDP则更为适用。

2301_76606232的博客 1574
上一篇: 【计算机网络】传输层协议TCP
下一篇: 【剑指offer】二维数组的查找
pointer_y
博客等级 码龄11年 157粉丝 107原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值