Linux_C socket 一些知识

1.大端字节序,即低地址高字节

TCP/IP协议规定,网络数据流应采用大端字节序,即低地址高字节。例如上一节的UDP段格式,
地址0-1是16位的源端口号,如果这个端口号是1000(0x3e8),则地址0是0x03,地址1是0xe8,
也就是先发0x03,再发0xe8,这16位在发送主机的缓冲区中也应该是低地址存0x03,高地址
存0xe8。但是,如果发送主机是小端字节序的,这16位被解释成0xe803,而不是1000。因此,发
送主机把1000填到发送缓冲区之前需要做字节序的转换。同样地,接收主机如果是小端字节序的,
接到16位的源端口号也要做字节序的转换。如果主机是大端字节序的,发送和接收都不需要做转
换。同理,32位的IP地址也要考虑网络字节序和主机字节序的问题。

处理方法: htonl/ htons / ntohl / ntohs   (h表示host,  n表示network)

2.int accept(int s,struct sockaddr * addr,int * addrlen); 此函数中, 最后一个参数int * addrlen 为传入传出参数。由于cliaddr_len是传入传出参数,每次调用accept()之前应该重新赋初值。

while (1) {
cliaddr_len = sizeof(cliaddr);
connfd = accept(listenfd,
(struct sockaddr *)&cliaddr, &cliaddr_len);
n = read(connfd, buf, MAXLINE);
...
close(connfd);
}

3.客户端是不需要bind()的,因为没要必要使用固定端口,它的端口由内核自动分配。而需要connect()

客户端需要调用connect()连接服务器,connect和bind的参数形式一致,区别在于bind的参数是自
己的地址,而connect的参数是对方的地址。

时间: 2024-11-06 13:10:46

Linux_C socket 一些知识的相关文章

iOS Socket理论知识

iOS Socket理论知识 序言 网络七层由下往上分别为物理层.数据链路层.网路层.传输层.会话层.表示层和应用层.其中物理层.数据链路层和网络层通常被称作媒体称,是网络工程师所研究的对象;传输层.会话层.表示层和应用层则被称作主机层,是用户所面向和关心的内容. http协议对应与应用层 TCP/UDP协议对应于传输层 IP协议对应于网络层 三者本质上没有可比性.何况HTTP协议是基于TCP连接的.TCP/IP是传输层协议,主要解决数据如何在网络中传输:而HTTP是应用层协议,主要解决如何包装

关于socket的知识总结

简单点说: 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的send和recv两个函数来说吧... 比如你调用send函数发送一定的Byte,在系统内部send做的工作其实只是把数据传输(Copy)到TCP/IP协议栈的输出缓冲区,它执行成功并不代表数据已经成功的发送出去了,如果TCP/IP协议栈没有足够的可用缓冲区来保存你Copy过来的数据的话...这时候就体现出阻塞和非阻塞的不同之处了:对于阻塞模式的socket send函数将不返回直到系统缓

socket编程知识

Socket语法及相关: Socket Familile(地址簇) socket.AF_UNIX unix本机进程间通信 socket.AF_INET     IPV4     经常用的还是这里 socket.AF_INET6   IPV6 Socket Types socket.SOCK_STREAM          #tcp协议用到 socket.SOCK_DGRAM            #udp协议用到 socket.SOCK_RAM                #原始套接字,普通的

Linux_C socket 数据报之client, server.c

dgrecv.c 1 /**************************************************************** 2 * dgrecv.c - datagram receiver 3 * usage: dgrecv portnum 4 * action: listens at the specfied port and reports messages 5 */ 6 #include <stdio.h> 7 #include <stdlib.h&g

Linux_C socket 数据报之一些辅助函数

1 /******************************************************************** 2 * dgram.c 3 * support functions for datagram based programs 4 */ 5 #include <stdio.h> 6 #include <unistd.h> 7 #include <sys/types.h> 8 #include <sys/socket.h>

python socket理论知识

一.socket理论: 发现一个很好的文章,一个高手写的,我也就不再做搬运工了,直接连接吧,对理论感兴趣的可以去看看! http://www.cnblogs.com/dolphinX/p/3460545.html

Linux_C socket 服务器与客户端交互程序(输入小写转换为大写)

client.c 1 /* interactionSocket/client.c 2 * 实现终端与服务器端的交互式输入输出 3 */ 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <string.h> 7 #include <unistd.h> 8 #include <sys/types.h> 9 #include <sys/socket.h> 10 #include &

SOCKET基础知识(1)

CSOCKET 1 /////////////////////服务端 2 CSOCKET socket; 3 socketaddr_in saddr; 4 saddr.sin_family = AF_INET; 5 saddr.sin_port = htons(80); 6 saddr.sin_addr_in.S_un.S_addr = inet_addr("127.0.0.1"); 7 sock.Bind((SOCKADDR *)saddr,sizeof(saddr)); 8 soc

socket 基础知识

PHP使用Berkley的socket库来创建它的连接.socket只不过是一个数据结构.你使用这个socket数据结构去开始一个客户端和服务器之间的会话.这个服务器是一直在监听准备产生一个新的会话.当一个客户端连接服务器,它就打开服务器正在进行监听的一个端口进行会话.这时,服务器端接受客户端的连接请求,那么就进行一次循环.现在这个客户端就能够发送信息到服务器,服务器也能发送信息给客户端.    产生一个Socket,你需要三个变量:一个协议.一个socket类型和一个公共协议类型.产生一个so