[問題] socket的client送兩筆資料給server的寫法
開發平台(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
12/25 15:24, 1F
→
12/25 15:27, , 2F
12/25 15:27, 2F
→
12/25 15:27, , 3F
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