1 / 18
文档名称:

网络编程 第二课 Socket编程基础.ppt

格式:ppt   大小:68KB   页数:18页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

网络编程 第二课 Socket编程基础.ppt

上传人:bjy0415 2018/5/30 文件大小:68 KB

下载得到文件列表

网络编程 第二课 Socket编程基础.ppt

相关文档

文档介绍

文档介绍:Lecturer: 张靖宇四川大学计算机学院
Email:jingyuz@
网络编程
Part2. Socket编程基础
1
2: Socket编程基础
System calls relevant working
socket
connect
bind
listen
accept
send
recv
close / closesocket
shutdown
select
fcntl
getsockname
getpeername
getsockopt
2
2: Socket编程基础
socket System Call
网络应用进程调用的第一个函数,用于创建套接口
int socket(int family, int type, int protocol);
返回:非负描述字成功,-1 失败
典型用例
int sockfd=socket(,SOCK_STREAM,
IPPROTO_TCP);
3
2: Socket编程基础
bind System Call
bind为套接口分配一个本地协议地址
int bind(int sockfd,
const struct sockaddr * myaddr,
int addrlen);
几乎所有server进程在三路握手前,都需要绑定到一个well-known地址。
client通常不必调用bind。Why?
4
2: Socket编程基础
bind System Call –示例
int sockfd;
// Create a socket
sockfd = socket(, SOCK_STREAM, PPROTO_TCP);
// Set up the sockaddr structure
struct sockaddr_in saServer;
= ;
= inet_addr(“”);
= htons(7000);
// Bind the listening socket using the
// information in the sockaddr structure
bind(sockfd,(struct sockaddr *) &saServer, sizeof(saServer) );
5
2: Socket编程基础
bind System Call –参数解释
...
struct sockaddr_in saServer;

bind(sockfd,(struct sockaddr *) &saServer, sizeof(saServer) );
注意两个表示地址的结构体的区别!
6
2: Socket编程基础
套接口地址 strcut
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
struct sockaddr_in {
u_short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
struct in_addr {
u_long s_addr;
};
struct sockaddr_in6 { u_short sin6_family; u_short sin6_port; u_long sin6_flowinfo; struct in6_addr sin6_addr;
u_long sin6_scope_id;
};
7
2: Socket编程基础
byte order
不同类型CPU的电脑中,内存存储multi-bytes整数序列有两种方法:
小端序(little-endian) - 低序字节存储在低地址
大端序(big-endian)- 高序字节存储在低地址
网络中传输的数据必须按网络字节序,即大端序
Intel CPU采用小端序做主机序
所以在大部分PC机上,当应用进程将整数送入socket前,需要转化成网络序;当应用进程从socket取出整数后,要转化成主机序
8
2: Socket编程基础
listen System Call
listen通知内核:ept ing connections
listen将套接口类型从主动(active)套接口转换成被动(passive)套接口;将套接口状态从CLOSED转换到LISTEN
函数第二个参数指定在此套接口排队的最大connections数量
int list