Linux下TCP/IP网络编程——结课考试知识总结

  • socket也被认为是文件的一种,因此在网络数据传输过程中自然也可以使用文件I/O的相关函数。

  • 协议就是为了完成数据交换而做的约定。
    PF_INET—-IPv4互联网协议

  • 下列数据适合用那类套接字传输
    • a.演唱会现场直播的多媒体数据(SCOK_DGRAM)
    • b.某人压缩过的文本文件(SCOK_STREAM)
    • c.网上银行用户与银行之间的数据传递(SCOK_STREAM)
  • 端口号就是在同一操作系统内为区分不同的套接字而设置的,由16位构成,可分配的端口号是0~65535,但1~1023时知名端口,一般分配给特定的应用程序。

  • TCP套接字和UDP套接字不会共用端口号,允许重复,但相同的套接字不允许端口重复。

  • 数据传输目标地址同时包含IP地址和端口号。

  • 客户端调用connect函数后,发生以下情况之一才会返回(完成函数的调用)
    • 服务器端接受连接请求
    • 发生断网等异常情况而中断连接请求
  • TCP
    Linux下TCP/IP网络编程——结课考试知识总结_第1张图片

    Linux下TCP/IP网络编程——结课考试知识总结_第2张图片


  • ceho_client.c
 #include
 #include
 #include
 #include
 #include
 #define BUF_SIZE 1024
 void error_handling(char *message);
 int main(int argc,char *argv[])
 {
     int sock;
     char message[BUF_SIZE];
     int str_len;
     struct sockaddr_in serv_adr;
     if(argc!=3)
     {
         printf("Usage: %s \n",argv[0]);
         exit(1);
     }
     sock = socket(PF_INET,SOCK_STREAM,0);
         if(sock==-1)
             error_handling("socket() error");
     memset(&serv_adr,0,sizeof(serv_adr));
     serv_adr.sin_family = AF_INET;
     serv_adr.sin_addr.s_addr = inet_addr(argv[1]);
     serv_adr.sin_port = htons(argv[2]);

     if(connect(sock),(struct sockaddr*)&serv_adr,sizeof(serv_adr)) == -1)
         error_handling("connect() error!");
     else
         puts("Connected......");
 while(1)
 {
     fputs("Input message(Q to quit):",stdout);
     fgets(message,BUF_SIZE,stdin);

     if(!strcmp(message,"q\n") || !strcmp(message,"Q\n"))
         berak;

     write(sock,message,strlen(message));
     str_len = read(sock,message,BUF_SIZE-1);
     message{str_len} = 0;
     printf("Message from server: %s",message);
 }
     close(sock);
     return 0;
 }

 void error_handling(char *message)
 {
     fputs(message,stderr);
     fputc('\n',stderr);
     exit(1);
 }

你可能感兴趣的:(Linux网络编程,网络编程,socket,linux,互联网)