Linux_socket编程(TCP与UDP)

一、计算机体系结构

       计算机体系结构主要有以下三种

        每一层协议对于的功能与应用有

 二、Linux的socket编程

        1、函数介绍

        int socket(int domain, int type, int protocol);

                参数1:AF_INET        IPv4 Internet protocols

                参数2:SOCK_STREAM(TCP)        SOCK_DGRAM(UDP)

                返回值:成功返回socket id,失败返回-1

        int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

                参数1:socket id

                参数2:sockaddr 

                           struct sockaddr_in server_addr;
                           server_addr.sin_family = AF_INET;
                           server_addr.sin_port = htons(PORT);
                           server_addr.sin_addr.s_addr = htonl(INADDR_ANY);

                参数3:addrlen

                返回值:成功返回0,失败返回-1

        int listen(int sockfd, int backlog);

                参数1:socket id

                参数2:连结队列个数

                返回值:成功返回0,失败返回-1

        int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

                参数1:socket id

                参数2:client_addr

                参数3:client_addr_len

                返回值:成功返回非负整数,失败返回-1

        ssize_t recv(int sockfd, void *buf, size_t len, int flags);

                参数1:socket id

                参数2:接受指针

                参数3:接受长度

                参数4:默认为0

                返回值:接受长度,当连结断开返回0

        ssize_t send(int sockfd, const void *buf, size_t len, int flags);

                参数1:socket id

                参数2:发送数据指针

                参数3:发送长度

                参数4:默认为0

        int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

                参数1:socket id

                参数2:server_addr

                        struct sockaddr_in server_addr;
                        server_addr.sin_family = AF_INET;
                        server_addr.sin_port = htons(SERVER_PORT);
                        server_addr.sin_addr.s_addr = inet_addr(SERVER_IP);

                参数3:server_addr_len

                返回值:成功返回0,失败返回-1

        ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen);

                参数1:socket id

                参数2:接受指针

                参数3:接受长度

                参数4:默认0

                参数5:sendaddr

                参数6:sendaddr_len

        ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);

                参数1:socket id

                参数2:发送数据指针

                参数3:发送数据长度

                参数4:默认0

                参数5:recvaddr

                        struct sockaddr_in recvaddr;
                        recvaddr.sin_family = AF_INET;
                        recvaddr.sin_port = htons(RECV_PORT);
                        recvaddr.sin_addr.s_addr = inet_addr(RECV_IP);

                参数6:recvaddr_len

三、TCP与UDP的服务器与客户端创建过程

        1、TCP

        TCP服务器:

                1)socket

                2)bind

                3)listen

                4)accept

                5)recv与send

        TCP客户端:

                1)socket

                2)connect

                3)send与recv

        1、UDP

        UDP接受端

                1)socket

                2)bind

                3)recvfrom与sendto

        UDP发送端

                1)socket

                2)sendto与recvfrom

        

注:当将socket关闭时,recv在未接受数据不会立即返回,可使用以下函数关闭socket读写功能,即可立即返回。

shutdown(socket, SHUT_RDWR);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值