亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1511 | 回復(fù): 5
打印 上一主題 下一主題

哪位仁兄幫忙看一下一個(gè)簡單的通訊問題出在哪里??? [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2006-07-30 18:32 |只看該作者 |倒序?yàn)g覽
服務(wù)器端:

  1. #include <sys/socket.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <sys/types.h>
  6. #include <arpa/inet.h>
  7. #include <netdb.h>
  8. #include <netinet/in.h>
  9. #include<sys/wait.h>
  10. #include <unistd.h>
  11. #include <stdarg.h>

  12. #define IPADDR  "200.1.1.17"
  13. #define IPPORT  10001
  14. #define MaxCon        100
  15. #define MaxLen        512

  16. void vtcp_log(char * fmt , ...)
  17. {
  18.         char        filename[100];
  19.         FILE        *fp;
  20.         va_list        va;

  21.         memset(filename,0x00,sizeof(filename));
  22.         sprintf(filename,"%s/%s",getenv("LOGDIR"),"server.log");
  23.         fp=fopen(filename,"a");

  24.         va_start(va,fmt);
  25.         vfprintf(fp,fmt,va);
  26.         fclose(fp);
  27.         va_end(va);
  28. }


  29. int main(int argc,char **argv)
  30. {
  31.         char        hostname[256];
  32.         struct        hostent        * hostinfo;
  33.         char         *host,**names,**addrs;
  34.         struct        sockaddr_in        srv_addr,cli_addr;
  35.         int                sock_id,cli_sock_id,len;
  36.         int                forkpid;
  37.         char        buf[512];
  38.         int                buflen;

  39.         memset(&srv_addr,0x00,sizeof(struct sockaddr_in));
  40.         srv_addr.sin_family=AF_INET;
  41.         srv_addr.sin_addr.s_addr=inet_addr(IPADDR);
  42.         srv_addr.sin_port=htons(IPPORT);
  43.        
  44.         sock_id=socket(AF_INET,SOCK_STREAM,0);
  45.         if (sock_id==-1){
  46.                 vtcp_log("socket error \n");
  47.                 return 1;
  48.         }
  49.         if (bind(sock_id,(struct sockaddr *)&srv_addr,sizeof(srv_addr))<0){
  50.                 vtcp_log("bind error \n");
  51.                 return 1;
  52.         }
  53.         if (listen(sock_id,5)<0){
  54.                 vtcp_log("listen error !!!\n");
  55.                 return 1;
  56.         }
  57.         while(1){
  58.                 memset(&cli_addr,0x00,sizeof(struct sockaddr_in));
  59.                 len=sizeof(cli_addr);
  60.                 cli_sock_id=accept(sock_id,(struct sockaddr *)&cli_addr,(socklen_t *)&(len));
  61.                 if (cli_sock_id<0){
  62.                         vtcp_log("accept error \n");
  63.                         continue;
  64.                 } else {
  65.                         vtcp_log("cli_addr-->addr[%d]\n",cli_addr.sin_addr);
  66.                         vtcp_log("cli_addr-->port[%d]\n",cli_addr.sin_port);
  67.                 }
  68.                 if (fork()==0){
  69.                         close(sock_id);
  70.                         memset(buf,0x00,sizeof(buf));
  71.                         buflen=read(cli_sock_id,buf,MaxLen);
  72.                         if (buflen==-1){
  73.                                 vtcp_log("recv error \n");
  74.                                 return 0;
  75.                         } else if (buflen>0) {
  76.                                 vtcp_log("databuf is [%s]\n",buf);
  77.                         } else {
  78.                                 break;
  79.                         }
  80.                         memset(buf,0x00,sizeof(buf));
  81.                         strcpy(buf,"this is a test one");
  82.                         write(cli_sock_id,buf,MaxLen);
  83.                         memset(buf,0x00,sizeof(buf));
  84.                         strcpy(buf,"this is a test two");
  85.                         write(cli_sock_id,buf,MaxLen);
  86.                         close(cli_sock_id);
  87.                         exit(0);
  88.                 } else {
  89.                         close(cli_sock_id);
  90.                 }
  91.         }
  92. }
復(fù)制代碼


客戶端


  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<errno.h>
  4. #include<string.h>
  5. #include<netdb.h>
  6. #include<sys/types.h>
  7. #include<netinet/in.h>
  8. #include<sys/socket.h>
  9. #define SERVPORT 10001
  10. #define MAXDATASIZE 100;
  11. main()
  12. {
  13.   int sockfd,sendbytes;
  14.   char buf[100];
  15.   struct sockaddr_in serv_addr;
  16.   if((sockfd = socket(AF_INET,SOCK_STREAM,0)) == -1)
  17.   {
  18.       perror("create socket Error!");
  19.       exit(1);
  20.   }
  21.   serv_addr.sin_family = AF_INET;
  22.   serv_addr.sin_port = htons(SERVPORT);
  23.   serv_addr.sin_addr.s_addr = inet_addr("200.1.1.17");
  24.   bzero(&(serv_addr.sin_zero),8);
  25.   if(connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr))==-1)
  26.   {
  27.       perror("connect Error!");
  28.       exit(1);
  29.   }
  30.   memset(buf,0x00,sizeof(buf));
  31.   strcpy(buf,"cli 1");
  32.   write(sockfd,buf,sizeof(buf));
  33.   memset(buf,0x00,sizeof(buf));
  34.   strcpy(buf,"cli 2");
  35.   write(sockfd,buf,sizeof(buf));
  36.   memset(buf,0x00,sizeof(buf));
  37.   read(sockfd,buf,512);
  38.   printf("%s\n",buf);
  39.   close(sockfd);
  40.   exit (0);
  41. }

復(fù)制代碼


運(yùn)行的時(shí)候出錯(cuò):
accept的時(shí)候沒有報(bào)錯(cuò),但是read的時(shí)候出錯(cuò)。
這是log里面的內(nèi)容
cli_addr-->addr[0]
cli_addr-->port[45037]
cli_sock_id is [4]
recv error

[ 本帖最后由 zzw3206 于 2006-7-30 18:52 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2006-07-30 18:37 |只看該作者
if (buflen=-1)

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2006-07-30 18:46 |只看該作者
我暈,,這眼神不行啊,,看了很多邊就是沒有看出來。!
還有一些不明白的地方。
在客戶端write了2次,但在服務(wù)器端為什么沒有顯示第二次write的呢??也需要read兩次嗎
還有就是客戶端也只是收到服務(wù)器端的第一次write。

[ 本帖最后由 zzw3206 于 2006-7-30 18:55 編輯 ]

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2006-07-30 19:12 |只看該作者
如果經(jīng)常犯這個(gè)錯(cuò),建議-1寫前面

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2006-07-31 09:33 |只看該作者
原帖由 zzw3206 于 2006-7-30 18:46 發(fā)表
我暈,,這眼神不行啊,,看了很多邊就是沒有看出來。。
還有一些不明白的地方。
在客戶端write了2次,但在服務(wù)器端為什么沒有顯示第二次write的呢??也需要read兩次嗎
還有就是客戶端也只是收到服務(wù)器端 ...

客戶端第一次write后,服務(wù)端的read就返回了,沒讀你的第二次write.另外的同理.

PS:建議仔細(xì)看看書,理解一下基本知識

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2006-07-31 10:58 |只看該作者

  1.          while(1)
  2.          {
  3.                         memset(buf,0x00,sizeof(buf));
  4.                         buflen=read(cli_sock_id,buf,MaxLen);
  5.                         if (buflen==-1){
  6.                                 vtcp_log("recv error \n");
  7.                                 return 0;
  8.                         } else if (buflen>0) {
  9.                                 vtcp_log("databuf is [%s]\n",buf);
  10.                         } else {
  11.                                 break;
  12.                         }
  13.          }
復(fù)制代碼

這樣就可以收到全部的收到。。。。。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP