技术解析
实验的基本内容是客户端发消息,服务器端回显,
这里做在同一台电脑上用两个终端联系,
但是接下来麻烦来了
客户端显示莫名其妙的字符(好像是之前测试输入的。。跟本次输入完全没有关系)
用很原始的调试方法发现,客户端显示的东西完全不是服务器端返回的(服务器端get sendline!这句话根本就不执行。。。)
是我代码的问题还是电脑的问题
能帮我解释一下为什么么?十分感谢!
最后附代码
/*
* udpcli01.cpp
*
* Created on: 2015年4月23日
* Author: gzxultra
*/
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 4096
#define LISTENQ 1024 /* 2nd argument to listen() */
#define SERV_PORT 9877
#define SA struct sockaddr
void dg_cli(FILE *, int, const SA *, socklen_t);
int
main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr;
if (argc != 2) {
printf("usage:udpcli01sigio \n");
exit(1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
if((sockfd = socket(AF_INET, SOCK_DGRAM, 0))<0) {
printf("socket error.\n");
exit(1);
}
dg_cli(stdin, sockfd, (SA *)&servaddr, sizeof(servaddr));
exit(0);
}
void
dg_cli(FILE *fp, int sockfd, const SA *pservaddr, socklen_t servlen)
{
int n;
char sendline[MAXLINE], recvline[MAXLINE + 1];
//struct sockaddr_in from;
while (fgets(sendline, MAXLINE,fp) != NULL) {
sendto(sockfd, sendline, strlen(sendline), 0, pservaddr, servlen);
n = recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
recvline[n] = 0; /* null terminate */
fputs(recvline, stdout);
memset(sendline,0,sizeof(sendline));
memset(recvline,0,sizeof(recvline));
}
}