当前位置:  技术问答>linux和unix

linux C 套接字编程 有个地方不懂 求指教

    来源: 互联网  发布时间:2017-05-19

    本文导语:  代码所做的事:在客户端定义一个字符'A',在服务器端将其加1,然后在客户端输出。代码没有错误。 客户端代码: 1 #include    2 #include    3 #include    4 #include    5 #include    6 #include    7    8 int main()   9 {  10...

代码所做的事:在客户端定义一个字符'A',在服务器端将其加1,然后在客户端输出。代码没有错误。
客户端代码:

1 #include 
  2 #include 
  3 #include 
  4 #include 
  5 #include 
  6 #include 
  7 
  8 int main()
  9 {
 10     int sockfd;
 11     int len;
 12     struct sockaddr_un address;
 13     int result;
 14     char ch = 'A';
 15 
 16     sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
 17     address.sun_family = AF_UNIX;
 18     strcpy(address.sun_path, "server_socket");
 19     len = sizeof(address);
 20 
 21     result = connect(sockfd, (struct sockaddr *)&address, len);
 22     if (result == -1)
 23     {
 24         perror("oops:client1");
 25         exit(1);
 26     }
 27     write(sockfd, &ch, 1);                                                                                                                          
 28     printf("char from server = %cn", ch);
 29     read(sockfd, &ch, 1);
 30     printf("char from server = %cn", ch);
 31     close(sockfd);
 32     exit(0);
 33     
 34 }   
~        



服务器端代码:

  1 #include                                                                                                                               
  2 #include 
  3 #include 
  4 #include 
  5 #include 
  6 #include 
  7 
  8 int main()
  9 {
 10     int server_sockfd, client_sockfd;
 11     int server_len, client_len;
 12     struct sockaddr_un server_address;
 13     struct sockaddr_un client_address;
 14 
 15     unlink("server_socket");
 16     server_sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
 17 
 18     server_address.sun_family = AF_UNIX;
 19     strcpy(server_address.sun_path, "server_socket");
 20     server_len = sizeof(server_address);
 21     bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
 22 
 23     listen(server_sockfd, 5);
 24     while(1)
 25     {
 26         char c;
 27         printf("sever waitingn");
 28 
 29         client_len = sizeof(client_address);
 30         client_sockfd= accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
 31 
 32         read(client_sockfd, &c, 1);
 33         c++;
 34         sleep(10);
 35         write(client_sockfd, &c, 1);
 36         close(client_sockfd);
 37         printf("I am server, I have execed!n");
 38     }
 39 }




我的不懂的地方:在客户端的代码中,write函数下句输出的是‘A’, read函数下句输出的是‘B’, 这意味着,在客户端执行完write函数后暂停,直到执行完服务器端中的处理字符的这部分代码后再执行客户端的read函数及其后面的代码。我这样理解对吗,无论对否,该怎么解释这个现象呢?谢谢各位大神了!




|
read默认是阻塞的,直到socket中有数据时才返回
所以感觉它是暂停的

|
客户端定义的socket是阻塞的,所以read函数调用会阻塞直到有数据进来,很快就返回,说明服务器返回'b'很快

|
因为 你的sock_fd 是阻塞的,只有收到数据,否则就一直阻塞在read。你可以看一下unix 高编里的  select() 函数,可以设置非阻塞的。

    
 
 

您可能感兴趣的文章:

  • 关于linux套接字的问题
  • linux下原始套接字创建失败
  • Linux 套接字的问题
  • 大侠,求助!!LINUX下TCP套接字编程中客户端出现段错误
  • 请教高手:linux原始套接字问题
  • 请问linux下套接字读就绪产生什么信号
  • Linux下如何在普通用户下创建原始套接字(实现ping)
  • Linux9.0下最大套接字个数如何修改????(急)高分
  • 请问在Unix/Linux上的套接字模型有那些,那些比较常用,Apache使用的是那个,谢谢?!如果能和Windows上的作对比就更好了
  • linux 对 windows 的 套接字中文传输问题
  • 高分求高手赐教-关于linux下进程共享TCP套接字的问题
  • linux下原始套接字打印问题
  • linux网络套接字//accept参数为什么不用struct sockaddr结构体?
  • linux socket问题。。怎样获得已帮定特定port的一个套接字socket
  • 关于linux套接字缓冲区sk_buff的问题
  • 关于accept()函数能产生多少个套接字和在LINUX 能产生多少个线程
  • 【求助】套接字链接linux服务,显示connection refused
  • linux下面的原始套接字编程问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 学linux和开发linux有什么样的联系呢?请指教!!
  • 想使用Kliyx把Delphi写的代码编译为Linux程序, 装什么Linux什么版本最好?请明人指教,谢谢!?
  • Linux的DNS正向成功,反向解析失败,望指教!
  • 想学LINUX,请指教!
  • 怎么设置在Linux上面设置WEB服务器?请各位高手指教!!!
  • 初学linux/unix,请老鸟指教
  • 高手指教:怎样在LINUX下运行WIN98程序?
  • 没有软区能装linux么??谢谢大虾指教!!
  • 如何非光盘安装linux,请指教
  • 各位高手:光盘安装Linux9出现问题,请指教!
  • 我想在windows下往linux发送udp包,为什么收不到呀,请指教!
  • 构建linux 驱动开发环境问题。初学,大家指教。谢谢了
  • 可有人对linux的dhcp的源码分析过么?望各位指教,
  • 在linuxunix下运行*.c文件,用的是哪一个命令?请指教,在线等!
  • 请高手指教 关于linux下网络配置的问题
  • 各位Linux和Qt高手请指教!很急!
  • Linux常用命令介绍:更改所属用户群组或档案属性 iis7站长之家
  • 我想学习Linux 嵌入式开发,请大家指教
  • linux ftp 配置 望高手指教,感激不尽
  • linux 下,doxygen生成的html文件中文注释为乱码,请高手指教!
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,