《TCP/IP网络编程》笔记——第1章 网络编程和套接字

本文详细介绍了TCP/IP网络编程中的服务端和客户端流程,涉及socket的创建、bind、listen、accept等关键步骤。同时,讨论了在Linux与Windows下套接字的文件操作差异,以及套接字地址分配的重要性。最后,提到了套接字在服务器端listen和accept函数的区别,并对比了底层文件I/O与ANSI标准I/O函数的不同。
摘要由CSDN通过智能技术生成

本章中关于socket代码详细功能解析在后续章节中都有提及,故遇到看不明白的可以先跳过。

1、服务端流程

  • 第一步:调用socket函数创建套接字
#include <sys/socket.h>

int socket(int domain,int type,int protocol);
//成功返回文件描述符,失败返回-1
  • 第二步:调用bind函数分配ip地址和端口号
#include <sys/socket.h>

int bind(int sockfd,struct sockaddr *myaddr,socklen_t addrlen);
//成功返回0,失败返回-1
  • 第三步:调用listen函数转换为可接受请求状态
#include <sys/socket.h>

int listen(int sockfd,int backlog);
//成功返回0,失败返回-1
  • 第四步:调用accept函数受理连接请求
#include <sys/socket.h>

int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
//成功返回文件描述符,失败返回-1

示例代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>
void error_handling(char* message);

int main(int argc,char* argv[])
{
   
    int serv_sock;
    int clnt_sock;
    
    struct sockaddr_in serv_addr;
    struct sockaddr_in clnt_addr;
    socklen_t clnt_addr_size;
    
    char message[]="hello world";
    
    if(argc!=2)
    {
   
        printf("Usage : %s <port>\n",argv[0]);
        exit(1);
    }
    
    serv_sock=socket(PF_INET,SOCK_STREAM,0);
    if(serv_sock==-1)
        error_handling("socket() error");
    
    memset(&serv_addr,0,sizeof(serv_addr));
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr.s_addr=htonl(INADDR_ANY);
    serv_addr.sin_port=htons(atoi(argv[1]));
    
    if(bind(serv_sock,(struct sockaddr*)& serv_addr,sizeof(serv_addr))==-1)
        error_handling("bind() error");
    
    if(listen(serv_sock,5)==-1)
        error_handling(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值