[問題] socket的client送兩筆資料給server的寫法

看板C_and_CPP作者 (張小光)時間12年前 (2011/12/24 14:59), 編輯推噓3(302)
留言5則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) GCC 問題(Question): 大家好,小弟剛碰socket的程式 不知道如何實做出我想要的結果 試了很多次結果都不正確 故來此詢問各位大大 目前是的情況是 clinet一次要送給server兩筆資料 所以clinet端部分我把程式寫成 ToServer(info, id) { int sockfd; struct sockaddr_in dest; sockfd = socket(PF_INET, SOCK_STREAM, 0); bzero(&dest, sizeof(dest)); dest.sin_family = PF_INET; dest.sin_port = htons(1042); dest.sin_addr.s_addr = inet_addr("140.113.240.181"); if(connect(sockfd, (struct sockaddr*)&dest, sizeof(dest)) == -1) return printf("error\n"); send(sockfd, p_info, sizeof(p_info),0); sleep(2); send(sockfd, g_uid, sizeof(g_uid), 0); close(sockfd); return OK; } server端程式則為 char* FromClient() { int sockfd; struct sockaddr_in dest; unsigned char *p_msg = NULL; unsigned char *p_uid = NULL; sockfd = socket(PF_INET, SOCK_STREAM, 0); bzero(&dest, sizeof(dest)); dest.sin_family = AF_INET; dest.sin_port = htons(1042); dest.sin_addr.s_addr = INADDR_ANY; bind(sockfd, (struct sockaddr*)&dest, sizeof(dest)); listen(sockfd, 20); while(1) { int clientfd; struct sockaddr_in client_addr; int addrlen = sizeof(client_addr); clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen); int res = recv(clientfd, p_msg, sizeof(p_msg), 0); if(res > 0) { close(clientfd); clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen); while(1) { res = recv(clientfd, p_uid, sizeof(p_uid), 0); /* res always -1 */ if(res > 0) { close(clientfd); break; } } break; } } return msg_handle_func(p_msg, p_uid); } 預期的正確結果(Expected Output): 預期的結果是希望分別收到正確的p_msg和p_uid後 再丟給msg_handle_func做處理 錯誤結果(Wrong Output): 結果server端只收的到clinet端的第一筆send,也就是p_msg 之後就會在server端裡黃色那行程式所屬的while裡面一直等待第二筆資料 res會一直顯示-1 可是clinet端的第二筆資料明明有正確送出 不知道為什麼server端收 不到 補充說明(Supplement): 這個方法是我想到的笨方法 或許有更好的寫法 希望有大大能夠教我一下 我研究了滿久了可是想不出來哪裡不對 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.240.181 ※ 編輯: shinehsnu 來自: 140.113.240.181 (12/24 15:03)

12/25 15:24, , 1F
115 也在寫類似作業給推 T^T
12/25 15:24, 1F

12/25 15:27, , 2F
把 p_info 跟 g_uid 用一個分隔字元串起來
12/25 15:27, 2F

12/25 15:27, , 3F
送出後再到 server 切開如何?
12/25 15:27, 3F

12/28 12:52, , 4F
學長好
12/28 12:52, 4F

12/29 15:27, , 5F
學長好
12/29 15:27, 5F
文章代碼(AID): #1EzNXLP_ (C_and_CPP)