我试图写一个TCP客户端,做以下的事情:如何阅读c中的套接字答复?
1. Establish TCP connection to webserver
2. Accept GET request command from user's console
3. Client should get a reply back from webserver after each GET request.
我在为第三条件困难的时候。我没有收到来自网络服务器的任何回应。
这里是我的代码:
s = connectTCP(host, service);
while (fgets(buf, sizeof(buf), stdin)) {
buf[LINELEN-2]='\r'; /* ensure catridge return */
buf[LINELEN-1]='\n'; /* ensure line feed return */
buf[LINELEN] = '\0'; /* ensure line null-terminated */
outchars = strlen(buf);
(void) write(s, buf, outchars);
printf("Start reading from socket...\n");
fflush(stdout);
while((n = read(s, buf, LINELEN)) > 0) {
buf[n] = '\0'; /* ensure null-terminated */
(void) fputs(buf, stdout);
fflush(stdout);
}
}
它没有伤害,但实际上并不需要大多数服务器(甚至可以使用单个'\ n'而不是'\ r \ n')。 – kriss 2010-09-17 11:26:09
@caf'fgets()'只填充数据的'size - 1'字符,并且总是附加一个空值,所以'-3'很好。 'write'包含要发送的数据的长度,所以字符串不需要以NUL结尾。 'strcpy()'(也许''strcat()')虽然可能更好。 – llasram 2010-09-17 12:01:58
同意不需要'write()'的终止符 - 可以使用'memcpy()'代替。 – caf 2010-09-17 12:11:24