TCP,UDP

地址转换:aton\atoa,ascii,network,32bit与ascii转换



大端小端转换



字节充转换:htons\htonl\htohs\ntohl.网络序与主机序转换。



主机名转换为IP地址:

struct hostent *gethostbyname(const char *hostname)

struct hostent

{

    char *h_name;

    char *h_aliases;

    int h_addrtype;

    int h_length;

    char **h_addr_list;

}



sock编程常用函数:

socket创建一个socket

bind绑定IP地址的端口号到socket

connect连接服务器

listen设定服务器允许的最大连接数

accept等待客户端socket连接请求

send发送数据

recv接收数据





基于TCP服务器:

a.使用socket函数创建socket

b.使用bind函数绑定IP地址、端口信息到socket上

c.使用listen设置允许的最大连接数

d.使用accept等待客户端连接请求,阻塞等待。

e.使用send/recv或者read/write收发数据

f.关闭连接



基于TCP客户端:

a.使用socket创建socket

b.设置要连接的服务器的IP地址和端口的属性

c.使用connect连接服务器

d.使用send/recv或者read/write收发数据

e.关闭连接





基于UDP服务器:

a.使用socket创建一个socket

b.使用bind绑定地址、端口信息到socket

c.使用recvfrom循环接收数据

d.关闭连接



基于UDP客户端:

a.使用socket创建一个socket

b.使用bind绑定地址、端口信息到socket

c.设置对方的IP地址、端口等属性

e.使用sendto发送数据

f.关闭连接





并发服务器模型:

循环服务器:在同一时刻只能响应一个客户端请求

并发服务器:服务器同一时刻可以响应多个客户端请求





实现方法:

UDP服务器每次从套接字上读取一个客户端的夜请求---处理---然后将结果返回给客户端。

socket();

bind();

while(1)

{

     recvfrom();

    process();

    sendto();

}



TCP循环服务器接受一个客户端连接,然后处理,完成这个客户端所有请求后,断开连接:

socket();

bind();

listen();

while(1);

{

    accept();

    process();

    close();

}





TCP并发服务器:

并发服务器思想是每一个客户机的请求并不是由服务器直接处理,而是由服务器创建子进程来处理:

socket();

bind();

listen();

while(1)

{

    accept();

    if(fork()==0)

    {

        process();

        close();

        exit();

    }

    close();

}

 

你可能感兴趣的:(tcp)