zoukankan      html  css  js  c++  java
  • unix网络编程第一章demo

    之前一直以为time_wait状态就是主动关闭的那一方产生.然后这个端口一直不可以用.实际我发现服务端监听一个端口.客户端发来连接后.传输数据后.服务端关闭客户端套接字后.用netstat -nat | grep 端口 查看了产生了time_wait.但客户端依然可以不断连接服务端.然后服务端不断关闭.并不会影响监听端口.原来是只有服务端把监听端口描述符给关闭(不是accept那个连接.虽然,端口相同),在2mls时间内再次启动这个端口..就会提示Address already in use
    另外inet_pton(AF_INET,ip地址,&serv_addr.sin_addr);
    1. #include "unp.h"
    2. int main(int argc,char *argv[])
    3. { if(argc<2)
    4. {
    5. printf("please input server_ip ");
    6. return 0;
    7. }
    8. int fd=socket(AF_INET,SOCK_STREAM,0);
    9. if(fd<0)
    10. err_quit("socket create error");
    11. struct sockaddr_in servaddr;
    12. struct sockaddr_in clientaddr;
    13. clientaddr.sin_family=AF_INET;
    14. clientaddr.sin_port=htonl(5900);
    15. clientaddr.sin_addr.s_addr=htons(INADDR_ANY);
    16. bind(fd,(SA*)&clientaddr,sizeof(clientaddr));`
    17. servaddr.sin_family=AF_INET;//message proctoal
    18. servaddr.sin_port=htons(13);
    19. if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<0)
    20. err_quit("inet_pton error");
    21. if(connect(fd,(SA*)&servaddr,sizeof(servaddr))<0)
    22. err_quit("connect error");
    23. char buf[1024];
    24. int read_length=0;
    25. int count=0;
    26. while((read_length=read(fd,buf,sizeof(buf)))>0)
    27. { count++;
    28. buf[read_length]='';
    29. printf("%s read %d ",buf,count);
    30. }
    31. printf("count=%d ",count);
    32. if(read_length<0)
    33.      err-quit("error of read");
    34.      close(fd);
    35.      return 0;

    服务端
    1. #include "unp.h"
    2. #include <time.h>
    3. int main(int argc,char *argv[])
    4. {
    5. int listenfd=Socket(AF_INET,SOCK_STREAM,0);
    6. struct sockaddr_in servaddr;
    7. servaddr.sin_family=AF_INET;
    8. inet_pton(AF_INET,"0.0.0.0",&servaddr.sin_addr);
    9. servaddr.sin_port=htons(13);
    10. Bind(listenfd,(SA*)&servaddr,sizeof(servaddr));
    11. Listen(listenfd,10);
    12. time_t ticks;
    13. int i;
    14. char buf[1024];
    15. for(;;)
    16. {
    17. int client_fd=accept(listenfd,NULL,0);
    18. ticks=time(NULL);
    19. snprintf(buf,sizeof(buf),"%.24s ",ctime(&ticks));
    20. for(i=0;i<strlen(buf);++i)
    21. Write(client_fd,&buf[i],1);
    22. Close(client_fd);
    23. //Close(listenfd);
    24. }
    25. return 0;
    26. }
    27. ~
    1.5题 不同tcp对数据做不同的处理,每次读取会发现count不同.





  • 相关阅读:
    咖啡生活-享受慵懒的午后时光
    窗体皮肤实现
    编译树莓派2代B型OpenWrt固件实现无线路由器及nodogsplash认证功能
    通过hook实现禁止shift+delete快捷键
    c++ Qt向PHP接口POST文件流
    Qt for Android开发总结
    A previous installation of Qt5 Visual Studio Add-in was detected. Please uninstall it before running this installer解决办法
    windows下Qt5.1 for android开发环境配置
    Qt+mpg123+openal播放MP3流
    RTC搭建android下三层应用程序访问服务器MsSql-客户端
  • 原文地址:https://www.cnblogs.com/zengyiwen/p/5755210.html
Copyright © 2011-2022 走看看