socket

Socket编程--TCP服务端注意事项

孤街醉人 提交于 2020-02-18 19:09:26
僵尸进程处理   僵尸进程和孤儿进程 :   基本概念:我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。(大体就是父进程必须去得到子进程的结束信息,如果没有得到的就是僵尸,死了还在系统中,父进程不知道。)   孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。   僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。   孤儿进程和僵尸进程的危害:   孤儿: 孤儿进程是没有父进程的进程,孤儿进程这个重任就落到了init进程身上 ,init进程就好像是一个民政局,专门负责处理孤儿进程的善后工作。每当出现一个孤儿进程的时候,内核就把孤 儿进程的父进程设置为init,而init进程会循环地wait()它的已经退出的子进程。这样,当一个孤儿进程凄凉地结束了其生命周期的时候

TI通信开发套件NDK

…衆ロ難τιáo~ 提交于 2020-02-18 10:29:57
NDK开发套件的高效率设计 为了加速其高档DSP的网络化进程,TI公司结合其C6000系列芯片推出了TCP/IP NDK (Network Developer’s Kit)开发套件。 NDK主要的组件包括:(1)支持TCP/TP协议栈程序库。其中主要包含的库有:支持TCP/IP网络工具的库,支持TCP/IP协议栈与DSP/BIOS平台的库,网络控制以及线程调度的库(包括协议栈的初始化以及网络相关任务的调度)(2)示范程序。其中主要包括DHCP/Telnet客户端,HTTP/数据服务器示范等。(3)支持文档包括用户手册、程序员手册和平台适应手册。 NDK采用紧凑的设计方法,实现了用较少的资源耗费来支持TCP/IP。从实用效果看,NDK仅用200~250K程序空间和95K数据空间即可支持常规的TCP/IP服务,包括应用层的telnet、DHCP、HTTP等。为了最大限度地减少资源消耗,TI为其NDK采用了许多特殊的技巧,重要的有:(1)UDP socket和RAW socket不使用发送或接收缓冲区;(2)TCP socket使用发送缓冲区,接收缓冲区依配置文件而定;(3)低层驱动程序与协议栈之间通过指针传递数据,不对包进行复制拷贝;4、设置专门的线程清除存储器中的碎片和检查存储器泄露。因此,NDK很适合目前嵌入式系统的硬件环境,是实现DSP联网通信的重要支撑工具。

C++ socket编程基础(ZT)

蹲街弑〆低调 提交于 2020-02-18 10:28:00
SOCKET中首先我们要理解如下几个定义概念: 一是IP地址:IP Address我想很容易理解,就是依照TCP/IP协议分配给本地主机的网络地址,就向两个进程要通讯,任一进程要知道通讯对方的位置,位置如何来确定,就用对方的IP 二是端口号:用来标识本地通讯进程,方便OS提交数据.就是说进程指定了对方进程的网络IP,但这个IP只是用来标识进程所在的主机,如何来找到运行在这个主机的这个进程呢,就用端口号. 三是连接:指两个进程间的通讯链路. 四是半相关:网络中用一个三元组可以在全局唯一标志一个进程: (协议,本地地址,本地端口号) 这样一个三元组,叫做一个半相关,它指定连接的每半部分。 五是全相关 一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识: (协议,本地地址,本地端口号,远地地址,远地端口号) 这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。 客户/服务器模式 在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户

UDP基础server与client

点点圈 提交于 2020-02-18 07:55:15
1、基础功能 1、server端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) # 建立一个socket对象, # 指定以UDP协议的形式来连接 sk.bind(('127.0.0.1',8080)) # 指定服务的地址 msg,addr = sk.recvfrom(1024) # msg为接收到的消息,addr为发送端的地址 print(msg,addr) sk.sendto(b'HELLO',addr) # 给发送端回复消息,需携带 发送端的地址 sk.close() # 关闭socket连接 2、clien端 import socket sk = socket.socket(type=socket.SOCK_DGRAM) sk.sendto(b'hello',('127.0.0.1',8080)) # 直接给服务器发送一段消息,需携带目的地址 msg,addr = sk.recvfrom(1024) # 接收对面的回信 print(msg) sk.close() 2、udp聊天小工具 1、客户端 import socket ph = socket.socket(type=socket.SOCK_DGRAM) ip_port = (("127.0.0.1",8089)) while 1: input_msg =

windows socket client server 测试

时光怂恿深爱的人放手 提交于 2020-02-18 07:54:36
client.c: 1 //Client.cpp 2 #include "StdAfx.h" 3 #include <winsock2.h> 4 #include <stdio.h> 5 #include <windows.h> 6 #pragma comment(lib,"ws2_32.lib") 7 int main(int argc, char* argv[]){ 8 //判断是否输入了IP地址和端口号 9 if(argc!=3){ 10 printf("Usage: %s IPAddress PortNumber/n",argv[0]); 11 exit(-1); 12 } 13 //把字符串的IP地址转化为u_long 14 unsigned long ip; 15 if((ip=inet_addr(argv[1]))==INADDR_NONE){ 16 printf("不合法的IP地址:%s",argv[1]); 17 exit(-1); 18 } 19 //把端口号转化成整数 20 short port; 21 if((port = atoi(argv[2]))==0){ 22 printf("端口号有误!"); 23 exit(-1); 24 } 25 printf("Connecting to %s:%d....../n",inet_ntoa(*(in_addr*

socket相关函数

时光怂恿深爱的人放手 提交于 2020-02-18 07:21:23
一、头文件 sys/socket.h    函数和数据结构定义 netinet/in.h     IP v4和 IP v6 相关协议簇需要的信息 sys/un.h      UNIX机器间通信的相关信息(不涉及) arpa/inet.h     处理数字从操作系统字节序到网络字节序 netdb.h      映射服务到IP地址(不涉及) 二、API函数 socket()      创建socket bind()      绑定socket到IP地址和端口号 listen()      服务器监听客户端连接 connect()     客户端连接到服务器 accept()      应用程序接受完成3次握手的客户端连接 send() recv() write() read() 机器间相互发送数据 close()     关闭socket gethostbyname() gethostbyaddr() IP V4专有 select() poll() 处理多个连接的读写与错误状态 getsockopt()   得到对应socket的选项值 setsockopt()   设置对应socket的选项值 来源: https://www.cnblogs.com/zgqcn/p/10887649.html

about socket practice

有些话、适合烂在心里 提交于 2020-02-18 07:14:18
From <TCP IP网络编程> socket通信的整个过程可以比喻是电话机通信 server: #include<WinSock2.h> int main(int argc, char* argv[]) { WSADATA wsaData; SOCKET hServSock,hClntSock; SOCKADDR_IN servAddr,clntAddr; int szClntAddr; char message[] = "Hello World!"; if(argc != 2) { cout<<"Usage:"<<argv[0]<<"<port> \n"<<endl; } if(WSAStartup(MAKEWORD(2,2),&wsaData) != 0) //完成对Winsock服务的初始化 { cout<<"wsaStartup error!"<<endl; } hServSock = socket(PF_INET,SOCK_STREAM,0); // 创建电话机 /*************************************************************************** 成功返回文件描述符(linux一切皆文件,文件描述符可以看做文件的数字代号) 失败返回-1(INVALID_SOCKET) ****************

远程接发命令,黏包

落花浮王杯 提交于 2020-02-17 23:17:08
让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) # import subprocess # ret = subprocess.Popen('dir',shell=True,stdout = subprocess.PIPE,stderr=subprocess.PIPE) # print(ret.stdout.read().decode('gbk')) # print(ret.stderr.read().decode('gbk')) 上面的结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码 有且只能从管道里读一次结果 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包。 注意:只有TCP有粘包现象,UDP永远不会粘包 基于tcp协议实现的远程执行命令 import socket # import subprocess # # sk = socket.socket() # sk.bind(('127.0.0.1',9000)) # sk.listen() # conn,addr = sk.accept() # # while True: # content = conn.recv

Python网络编程udp

拟墨画扇 提交于 2020-02-17 13:57:34
疫情当下,我在家敲代码!!!! 不出门,不约客,不为祖国增加负担,在家提升自己,就是对自己对国家的最大帮助。 网络通信概述 1.什么是网络 以打电话为例 说明: 网络就是一种辅助双方或者双方能够连接在一起的工具 如果没有网络, 单机 的世界是多么的孤单 没有网络的话,就没有今天的网络游戏,只有单机游戏,我们又怎么和远在他乡的小伙伴一起联机玩呢。 2.使用网络的目的 使用网络就是为了联通多方然后进行通信用的,即把数据从一方传递给另外一方 总结: 使用网络能够把多方链接在一起,然后可以进行数据的传递 所谓的网络编程就是让不同的电脑上的软件能够进行数据传递,即进程之间的通信 ip地址 1.什么是地址 地址就是用来标记地点的 2.ip地址的作用 怎么传过去? to :张三 content:来打农药? ip地址:用来在网络中标记一台电脑,比如192.168.1.1;在本地局域网上是唯一的。 3.ip地址的分类(了解内容) 每一个IP地址包括两部分:网络地址和主机地址 3.1 A类IP地址 一个A类IP地址有1字节的网络地址和3字节的主机地址组成,网络地址最高位必须是“0”,地址范围:1.0.0.1-126.255.255.254 二进制表示为:00000001 00000000 00000000 00000001 - 01111110 11111111 11111111 11111110

TCP的套接字的socket通信

≯℡__Kan透↙ 提交于 2020-02-17 06:46:48
TCP的套接字的socket通信 本篇主要通过实现TCP的套接字通信例程介绍套接字基础知识。 一、概念 套接字:TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点,就叫做套接字(socket)或插口。套接字用(IP地址:端口号)表示。 生成套接字的三个主要参数:通信的目的IP地址,使用传输层协议(TCP或UDP)和使用的端口。socket原意为插座,通过这三个参数与另一个插座(socket)绑定,应用层和传输层就可以通过套接字接口,区分来自不同应用程序或网络通信,实现数据传输的并发服务。 任务与任务之间的通信节点。要通过套接字进行通信,至少需要一对套接字,一个运行于客户机端,称之为ClinetSocket,另一个运行于服务器端,称之为ServerSocket。 简单的来说,我们需要套接字这个桥梁来实现客户端和服务器端的通信。 二、TCP套接字通信流程 服务器端: 1.创建套接字( socket ) 2.将套接字绑定到本地地址和端口上( bind ) 3.将套接字的状态设置为监听状态( listen ) 4.接受连接请求,并且得到用于通信的套接字( accept ) 5.使用接受连接请求后得到的套接字进行通信( send/recv ) 6.通信完毕,释放套接字( close ) 客户端: 1.创建套接字( socket ) 2.向服务器端发起连接请求(