第八篇:socket 通讯服务器模型--并发服务器模型

跨平台(Windows+Linux)的Socket通讯程序(一)—底层封装 【摘要】编写Socket通讯程序是一个老话题。本文重点介绍Windows平台和Linux平台Socket通讯的不同,采用C++,编制了一个简单的跨平台的Socket通讯库。 一、Socket通讯的基础知识 Socket通讯是两个计算机之间最基本的通讯方法,有TCP和UDP两种协议。关于这两种协议的区别,不少文章已有详述,这里,稍微总结一下: 1.TCP是面向连接的,是“流”式的,意即通讯两端 阅读详情

socket通讯服务器模型.有多种类型,多进程只是其中比较少用的一种,原因是它太“重”。

在生产环境中,使用多进程模型可能不是最高效的选择,特别是在处理大量并发连接时。多线程模型或IO多路复用模型可能是更好的选择。

父子进程:

​

多进程并发服务器原型 

#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>

int main() {
    pid_t pid;

    // 创建子进程
    pid = fork();

    if (pid < 0) {  // 创建子进程失败
        fprintf(stderr, "Fork failed.\n");
        return 1;
    } else if (pid == 0) {  // 子进程
        printf("Hello from child process!\n");
    } else {  // 父进程
        printf("Hello from parent process!\n");
    }

    return 0;
}
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>  // 正确的头文件
#include <unistd.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/wait.h>
#include <string.h>  // 为了使用 strerror

#define N 64

// 回收进程的资源
void handler(int signum)
{
    wait(NULL);
}

int main(int argc, char const *argv[])
{
    int sockfd;

    if (argc < 3)
    {
        printf("usage: %s <ip> <port>\n", argv[0]);
        return -1;
    }

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0)
    {
        perror("socket err");
        return -1;
    }

    struct sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_port = htons(atoi(argv[2]));
    // 自动绑定所有的本机网卡的地址
    addr.sin_addr.s_addr = INADDR_ANY;  // 或者使用 inet_addr(argv[1]) 来绑定特定 IP

    int addrlen = sizeof(addr);

    if (bind(sockfd, (struct sockaddr *)&addr, addrlen) < 0)
    {
        perror("bind err");
        close(sockfd);
        return -1;
    }

    if (listen(sockfd, 5) < 0)
    {
        perror("listen err");
        close(sockfd);
        return -1;
    }

    printf("wait client connect\n");
    int clifd;
    struct sockaddr_in cliaddr;

    struct sigaction sa;
    memset(&sa, 0, sizeof(sa));
    sa.sa_handler = handler;
    sigaction(SIGCHLD, &sa, NULL);

    while (1)
    {
        clifd = accept(sockfd, (struct sockaddr *)&cliaddr, &addrlen);
        if (clifd < 0)
        {
            perror("accept err");
            continue;
        }

        pid_t pid = fork();
        if (pid < 0)
        {
            perror("fork err");
            close(clifd);
            continue;
        }
        else if (pid == 0)  // 子进程
        {
            int ret;
            char buf[N] = {0};
            while (1)
            {
                ret = recv(clifd, buf, N, 0);
                if (ret < 0)
                {
                    perror("recv err");
                    continue;
                }
                else if (ret == 0)
                {
                    printf("peer exit\n");
                    break;
                }
                else
                {
                    printf("ip = %s, port = %d, data = %s\n",
                        inet_ntoa(cliaddr.sin_addr), ntohs(cliaddr.sin_port), buf);
                }
            }
            close(clifd);
            exit(0);
        }
        else  // 父进程
        {
            close(clifd);  // 关闭子进程已使用的套接字描述符
        }
    }

    close(sockfd);  // 这行代码实际上不会被执行,因为上面的循环是无限循环

    return 0;
}

这段代码实现了一个简单的多进程服务器,它能够监听来自客户端的连接请求,并在接受到连接后,通过创建一个新的子进程来处理每个客户端的通信。

包含的头文件

  • stdio.h:用于基本的输入输出函数,如printf。
  • sys/types.h、sys/socket.h、netinet/in.h、arpa/inet.h:这些头文件提供了网络编程所需的类型和函数,包括套接字创建、地址转换等。
  • unistd.h:提供对POSIX操作系统API的访问,如close、fork、exit等。
  • stdlib.h:包含了一些常用的库函数,如atoi(字符串转整数)。
  • sys/stat.h、fcntl.h:虽然在这段代码中没有直接使用,但通常用于文件操作。
  • signal.h:提供了信号处理的功能。
  • sys/wait.h:提供了等待进程结束的功能。
  • string.h:提供了字符串处理的函数,如memset和strerror(尽管strerror在这段代码中未使用)。

宏定义

  • #define N 64:定义了缓冲区的大小为64字节。

函数

  • handler(int signum):这是一个信号处理函数,用于处理子进程结束的信号(SIGCHLD)。它调用wait(NULL)来回收结束的子进程的资源。

主函数 main

  1. 参数检查:程序需要两个参数:IP地址和端口号。如果参数不足,程序将打印用法信息并退出。

  2. 创建套接字:使用socket函数创建一个TCP套接字。

  3. 配置地址结构:将服务器的IP地址(错误地设置为INADDR_ANY,这通常用于绑定到所有可用接口,应该使用inet_addr(argv[1])来指定特定IP)和端口号配置到sockaddr_in结构中。

  4. 绑定套接字:使用bind函数将套接字与指定的IP地址和端口号绑定。

  5. 监听连接:使用listen函数使套接字进入监听状态,准备接受连接请求。

  6. 设置信号处理:使用sigaction函数设置SIGCHLD信号的处理函数为handler。

  7. 接受连接:在一个无限循环中,使用accept函数接受来自客户端的连接请求。每当接受到一个连接时,都会创建一个新的子进程来处理这个连接。

  8. 子进程处理:

    • 在子进程中,使用recv函数从客户端接收数据。
    • 打印接收到的数据以及客户端的IP地址和端口号。
    • 当客户端关闭连接(recv返回0)时,子进程也关闭套接字并退出。
  9. 父进程处理:

    • 父进程在创建子进程后关闭子进程使用的套接字描述符(clifd),因为子进程已经有自己的描述符副本。
    • 父进程继续监听新的连接请求。

子进程退出的时候,经常需要清理一下“现场”

我们这里通过下面的方式实时:

struct sigaction sa;   //struct sigaction是一个结构体,用于指定如何处理信号
    memset(&sa, 0, sizeof(sa));
//下面将sa结构体中的sa_handler成员设置为handler。handler是一个函数指针,指向一个用户定义的函数,该函数将在接收到特定信号时被调用
    sa.sa_handler = handler;  
    sigaction(SIGCHLD, &sa, NULL);    //将SIGCHLD信号的处理方式设置为sa结构体中指定的方式

这是进程间通信和进程管理中的一个常见做法,特别是在需要处理子进程退出状态的情况下。

NACHI机械臂后台SOCKET通讯 NACHI机械臂后台TCP通讯 将机械臂做为服务器,电脑作为客户端。通讯程序在机械臂后台运行, 我是先在电脑上写好,导入机械臂文件夹中,转化成机器人语言,再在用户任务这里开启它的任务号码。 端口号设置为10030 代码 'TCP/IP_Socket(Server) '分隔符为,解析包 DIM Port AS INTERGER DIM State AS STRI... 阅读详情

相关推荐

Socket通讯原理(基础)

此文详细描述了socket通讯的过程, 并且用demo实现了客户端的搭建, 完成了客户端和服务器的简单的通讯

王俊岭的博客 4384

socket通信---并发服务器图解

当服务器处理一个客户请求可能需要相当长一段时间的时候,使用迭代服务器模式(即整个服务器可能被耽搁客户长期占用)是会影响系统性能的。而处理并发连接的服务器可以称为并发服务器。 并发服务器的一个简单操作是fork一个子进程来服务多个客户。当一个连接建立时,用于阻塞进程的aceept返回,服务器接着调用fork来创建一个子进程,该子进程通过已连接套接口connfd服务客户;而父进程就可以通过监听套...

mmdev 265

Java Socket实现双向通讯

当我们使用java套接字编程实现通讯时,如果想实现双向的通讯,就有必要对每次传输的数据量进行限制。 例如,实现一个可以进行多次密码验证的服务器--客户端程序。 首先是服务器代码 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Server...

苏小刚的博客 3601

网络socket服务器开发几种并发模型详解

socket server服务器开发常见的六种并发模型

1576

使用SOCKET实现TCP/IP协议的通讯

一、原理:      首先要理解基本的原理,2台电脑间实现TCP通讯,首先要建立起连接,在这里要提到服务器端与客户端,两个的区别通俗讲就是主动与被动的关系,两个人对话,肯定是先有人先发起会话,要不然谁都不讲,谈什么话题,呵呵!一样,TCPIP下建立连接首先要有一个服务器,它是被动的,它只能等待别人跟它建立连接,自己不会去主动连接,那客户端如何去连接它呢,这里提到2个东西,IP地址...

weixin_34050005的博客 2124

深入理解Socket网络事件通讯模型

在互联网时代,网络编程是IT专业人员必须掌握的技能之一。Socket编程是网络编程的基础,它允许计算机之间的通信。通过建立Socket连接,数据能够在客户端和服务器端之间传输。在Python、Java或C++等编程语言中,开发者通常会用到Socket API来构建网络应用。事件驱动编程模型(Event-Driven Programming Model)是一种以事件为基础来控制程序执行流程的编程范式。在这种模型中,程序的执行不遵循传统的顺序调用,而是响应外部或内部事件的变化而进行。

weixin_35728286的博客 1000

C-socket编程-多进程版并发服务器

#include <string.h> #include <arpa/inet.h> #include <sys/socket.h> #include <netinet/in.h> #include "wrap.h"int main() { //创建套接字 int serv_sock = Socket(AF_INET,SOCK_STREAM,0); /

wwzhang0307的博客 3221

基于FLUENT的圆柱绕流数值模拟与流场优化策略

本文详细介绍了基于FLUENT的圆柱绕流数值模拟方法与流场优化策略。从基础概念、建模技巧到湍流模型选择,全面解析了圆柱绕流模拟的关键技术,并提供了实用的网格划分和参数设置建议。通过具体案例展示了流动控制方法和优化流程,帮助工程师有效降低阻力系数,提升流场性能。

f6g7h8i9j的博客 703

Socket通讯解决并发采用线程池

作业交完了,代码分享一下!不多说什么了 服务器端ThreadServer ThreadPool.java package thread; import java.util.LinkedList; public class ThreadPool extends ThreadGroup{     private boolean isClosed=false;//线程池是否关闭

laymenISmouse的专栏 6297

2025年06月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析

2025年06月中国电子学会青少年软件编程(Python)等级考试试卷(二级)答案 + 解析

伶俐角少儿编程 457

【原理图PCB专题】案例:双排0.5mm间距座子转单排0.5mm间距座子Layout方案分析

本文提供一种分析思路,并通过实际案例来进行Layout方案分析的讲解。

一点硬件 454

高性能的socket通讯服务器(完成端口模型--IOCP)

关键词:delphi socket通讯服务器例程(完成端口模型--IOCP)、I/O Completion Port、socket通讯登峰造极、IO重叠、 IOCP客户服务端         高性能的socket通讯服务器(完成端口模型--IOCP)       很多人费尽心思,都没有找到一个完美的 I/O CP 例程,甚至跟人于误解,先将本人编写的例程

码客 卢益贵 ygluu 1万+

Unreal 从入门到精通之VR常用操作

本文总结了使用Unreal5开发VR项目时遇到的常见问题及其解决方案。首先,介绍了如何通过VRPawn的TryTeleport函数设置玩家视角位置,确保头显移动时安全区域的正确传送。其次,详细说明了如何在Unreal中播放视频,包括导入视频文件、创建媒体播放器和媒体纹理,并将其应用到3D物体上。接着,讲解了如何播放VR全景视频,建议使用MediaPlate媒体板并调整几何体为球体。最后,讨论了如何手动打开和关闭VR模式,以便在PC模式和头显模式之间切换。这些方法为VR开发提供了实用的技术指导。

TxNet 950

ABB机器人SOCKET通讯指令及用法基础篇

总结来说,客户端是主动发起连接并发送请求的一方,而服务器是被动接受连接并提供服务的一方。需要通讯助手或者ABB仿真软件的小伙伴可以关注私信我!客户端: 客户端是发起通讯的一方,它向服务器发送请求并等待服务器的响应。写入需要连接的服务器的IP地址以及其对应的端口号,这边使用通讯工具创建一个对应的服务器端口。在Socket通讯中,客户端和服务器是两个不同的角色,它们在通讯过程中有一些区别。服务器通常是一个具备处理能力的主机或设备,如Web服务器、数据库服务器等。客户端发送请求数据给服务器,并等待服务器的响应。

A567852的博客 9788

【原创教程】西门子1500与施耐德伺服的通讯以及调试

该函数块主要描述伺服的手动,左边的引脚Forward是指伺服手动正转,Backward是指伺服手动反转,Fast是指手动的某个方向为快速运行,TipPos手册上描述为固定值,WaitTIme是指伺服手动的相应时间,VeloSlow指伺服手动正常慢速运动的速度,VeloFast指伺服手动快速运动的速度,Acceleration是指伺服手动的加速度,Decelertion是指伺服手动的减速度。该函数块用于伺服停止,左边的引脚Execute为伺服停止执行,Deceleration含义为减速,Axis为轴。

Qinmingyue13的博客 1374

HQChart实战教程49-点击修改K线颜色及背景色

HQChart实战教程49-点击修改K线颜色及背景色需求效果图步骤1. 注册点击监听事件2. 修改K颜色添加一个自定义颜色的K线klineoption清空所有自定义颜色的K线option交流QQ群: 950092318HQChart代码地址完整例子 需求 对点击的K线修改颜色。 效果图 步骤 1. 注册点击监听事件 事件ID JSCHART_EVENT_ID.ON_CLICK_CHART_PAINT, 注册监听事件见教程 HQChart使用教程5- K线图控件操作函数说明 this.Create=func

小银 2911

Socket通讯

Socket(套接字)是网络编程的抽象接口,用于实现不同设备(或进程)之间的网络通信。它本质上是一个“通信端点”,通过操作系统提供的 API 屏蔽了底层网络协议的复杂细节,让开发者可以通过简单的函数调用实现数据传输。

eatbaozi的博客 2393

Coze 打通飞书多维表格,实现数据增删改查操作实战详解

基于Coze 打通飞书多维表实现数据录入系统实战详解

congge 5779

用C++实现最基本的Socket通讯(一)

前言闲聊 冬去春来,想着今年定个小目标,逐步实现TCP和UDP的通讯连接,自定义通讯协议,几种I/O模型(阻塞,非阻塞,I/O多路复用,IOCP),当中会涉及到许多知识,就我目前的知识水平大概了解有多线程,线程锁,生产者消费者模式,观察者模式,Json序列化,心跳监听等。在此分类的文章我尽量使用面向对象的思想来写,因为本人也才接触服务器不久,希望在文中出现了错误,或是有一些更好的方法或建议,希望...

立于浮华之世,奏出天使之章 5422

手把手教你学PCIE-- 热插拔电路设计与实现方案

PCIe热插拔(Hot-Plug)技术允许用户在系统运行时安全地插入或移除设备,而无需重启系统。本文将深入讲解热插拔电路的设计要点、关键器件选型及信号协议规范,涵盖机械结构、电气保护和电源管理三大核心模块。​。

MHD0815的博客 440

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Socket通讯编程

实验要求   基于 SOCKET通讯技术,在 Windows 平台下,采用 C语言设计开发一个类似 FTP 的文件服务器、客户端程序。客户端可以上传文件到服务器、可以列表服务器文件、可以下载保存文件。 实验环境   系统:Windows 10   语言:C语言   开发工具:Dcv-C++ 5.11 浅谈Socket   看一看百度百科的解释:所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机

Haa__的博客 1962

深度学习工具包 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")

windows下实现socket 的 通讯的 select 模型

通讯端点定义类:   #pragma once #include #define SERVER 1 #define CLIENT 2 #include using namespace std; class CEndpoint { public: CEndpoint(void); CEndpoint(SOCKET socket, unsigned

点点滴滴 1576

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WEB页面通过Socket和服务器通讯(上)

最近空闲,整理一下上一个项目的部分资料。由于需要web页面和服务器进行通讯,以前研究过Comet,听说过有那么几种方法可以实现服务器推。也没实际作过测试。通过上次的项目也正好有个机会来研究下,测试研究了下网上的几种方法。觉得通过FLASH作为桥接和服务器通讯是一个不错的方法,一个是Flash Player的安装比较广泛,而且ActionScript3.0应该是一门全新的语言。更加的和Jav

xiagezhao的专栏 4413

掌握C Socket通讯:一个完整的TCP通讯代码示例

掌握C# Socket通讯:一个完整的TCP通讯代码示例 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在现代软件开发中,网络通讯是不可或缺的一部分。无论是构建客户端-服务器应用,还是实现点对点的数据传输,Socket通讯技术都扮演着至关重要的角色。为了帮助开发者快速掌握C#中的Socket通讯技术,我们推出了这个完整的C# Socket通讯/TCP通讯代码示例项目。...

gitblog_09744的博客 1037

【Unity3D】同步Socket通讯

在多人对战网络游戏中,玩家之间一般不是直接通讯,而是与服务器通讯,服务器再把消息转发给其他玩家。光子引擎 Photon,其底层仍然使用 Socket 实现网络通讯。同步 Socket 是指 Socket 的部分方法会阻塞当前线程(如:Accept、Receive 方法),直到方法返回,当前线程才会继续执行。当有客户连接上服务器后,服务器会生成一个 Socket(通过 Accept 方法返回 Socket,可以理解为客服),与客户对接,进行信息交流。

little_fat_sheep 4002
上一篇: 第四篇:从accept()到select()
下一篇: 第九篇:Linux下socket广播通讯的实现
wh_xia_jun
博客等级 码龄16年 1335粉丝 405原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值