随笔分类 - socket
摘要:在一个 CLIENT/SERVER模型的网络应用中,客户端的调用序列大致如下: socket -> connect -> recv/send -> close 其中socket没有什么可疑问的,主要是创建一个套接字用于与服务端交换数据,并且通常它会迅速返回,此时并没有数据通过网卡发送出去,而紧随其后的connect函数则会产生网络数据的发送,TCP的三次握手也正是在此时开始,connect会先发送一个SYN包给服务端,并从最初始的CLOSED状态进入到SYN_SENT状态,在此状态等待服务端的确认包,通常情况下这个确认包会很快到达,以致于我们根本无法使用netstat命令看到
阅读全文
摘要:问题:在打印hostent的IP地址时,用到了inet_ntop(),在编译时显示这样的警告提示:dingq@wd-u1110:~/hwsvn/2sw/1prj_linux/pdu/src/branches/pdu-isocket/isocket$ make clean;make
rm -rf *.o tcpclient tcpserver
gcc -g3 -Wall -o0 -std=gnu99 -c nettrans.c -o nettrans.o
nettrans.c: In function ‘nettrans’:
nettrans.c:59:5: warning: implicit
阅读全文
摘要:问题:hostent是gethostbyname()和gethostbyaddr()都会涉及到的一个结构体。代码如下:struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; };gethostbyname()的原型是:struct hostent *gethostbyname(const char *name);函数的传入值是域名或者主机名,例如"www.google.com"、"191.168.1.253"等;函
阅读全文
摘要:以太网媒体接口有:MII、RMII、SMII、GMII。所有的这些接口都从MII而来,MII是(Medium Independent Interface)的意思,是指不用考虑媒体是铜轴、光纤、电缆等,因为这些媒体处理的相关工作都有PHY或者叫做MAC的芯片完成。MII支持10兆和100兆的操作,一个接口由14根线组成,它的支持还是比较灵活的,但是有一个缺点是因为它一个端口用的信号线太多,如果一个8端口的交换机要用到112根线,16端口就要用到224根线,到32端口的话就要用到448根线,一般按照这个接口做交换机,是不太现实的,所以现代的交换机的制作都会用到其它的一些从MII简化出来的标准,比如
阅读全文
摘要:在windows下有lansee和Advanced IP scanner来查找IP和对应的MAC地址,在ubuntu中,好用的工具似乎不多,nmap命令行工具倒是提供了强大的功能。可以使用命令来获取ip和mac地址:sudo nmap -sP -PI -PT -oN 192.168.1.0/24 > ipscan.txt-sP 通过ping方式发现扫描网络存活主机;-PI -PT -oN 将搜寻结果output正常Normally输出到随后指定的文件;nmap还可以用来完成如下工作:1。扫描主机端口,列出打开的端口号和服务debian:~# nmap -sT 192.168.0.2Sta
阅读全文
摘要:网关(英语:Gateway;台湾、港澳作闸道器),区别于路由器【说明:由于历史的原因,许多有关TCP/IP的文献曾经把网络层使用的路由器称为网关,在今天很多局域网采用都是路由来接入网络,因此现在通常指的网关就是路由器的IP!】(英语:Router),经常在家庭中或者小型企业网络中使用,用于连接局域网和Internet。 网关也经常指把一种协议转成另一种协议的设备,比如语音网关。网关顾名思义就是连接两个网络的设备,对于语音网关来说,他可以连接PSTN网络和以太网,这就相当于VOIP,把不同电话中的模拟信号通过网关而转换成数字信号,而且加入协议再去传输。在到了接收端的时候再通过网关还原成模拟的电话
阅读全文
摘要:Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反映函数的执行情况,如果事件发生则与阻塞方式相同,若事件没有发生则返回一个代码来告知事件未发生,
阅读全文
摘要:备注:该文简洁、形象地描述了socket常用函数的功能。有助于提纲挈领地掌握这些函数。概述socket() --得到文件描述符,架设好一部电话(服务器/客户端用,在本地建立一个套接字,作为一条通讯线路的一个端点)!bind() --有事请拨本电话(电话号码:IP,分机:Port)(主要用于server端,将文件描述符和地址信息主要是端口进行绑定)connect() --Hello(client端使用,用未命名套接字与服务器端监听套接字建立链接)!listen() --有人给我打电话吗(server端使用,创建等待队列存放未处理的客户端请求)?accept() --"Thank you
阅读全文
摘要:名称bind()把名字和套接字相关联使用格式#include #include int bind(int sockfd,const struct sockaddr *addr,socklen_t *addrlen);功能描述当用socket()函数创建套接字以后,套接字在名称空间(网络地址族)中存在,但没有任何地址给它赋值。bind()把用addr指定的地址赋值给用文件描述符代表的套接字sockfd。addrlen指定了以addr所指向的地址结构体的字节长度。一般来说,该操作称为“给套接字命名”。通常,在一个SOCK_STREAM套接字接收连接之前,必须通过bind()函数用本地地址为套接字命
阅读全文
摘要:名称accept()接收一个套接字中已建立的连接使用格式#include #include int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);功能参数描述accept()系统调用主要用在基于连接的套接字类型,比如SOCK_STREAM和SOCK_SEQPACKET。它提取出所监听套接字的等待连接队列中第一个连接请求,创建一个新的套接字,并返回指向该套接字的文件描述符。新建立的套接字不在监听状态,原来所监听的套接字也不受该系统调用的影响。备注:新建立的套接字准备发送send()和接收数据recv()。参数:sockfd
阅读全文