无法获取客户端通过 TCP 发送的消息
Can't get message sent by a client over TCP
我在 C\C++ 中编写了一个客户端,并向正在使用 nc -l -p 6666
.
侦听的本地计算机发送了一条消息
发送消息后,在我的本地主机上 nc
没有捕获到任何内容。
我想问题出在我的代码中,但我不确定是哪一行。
为什么我没有收到任何关于 nc
的消息?
代码:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[]) {
//http://www.linuxhowtos.org/C_C++/socket.htm
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
const char ip[] = "127.0.0.1";
char buffer[256];
portno = atoi("6666");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
error("ERROR opening socket");
}
/*
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
*/
inet_aton(ip, &serv_addr.sin_addr);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0){
error("ERROR connecting");
}
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
close(sockfd);
return(0);
}
一个 sockaddr_in
分为三部分:
- 主持人
你用 inet_aton
设置它(假设调用成功;最好添加一些错误检查!)
- 端口
你用 serv_addr.sin_port = htons(portno);
设置
- 家庭
在你的情况下应该是 AF_INET
但是,哎呀,你把它注释掉了!
其他一切看起来都很好。
我在 C\C++ 中编写了一个客户端,并向正在使用 nc -l -p 6666
.
侦听的本地计算机发送了一条消息
发送消息后,在我的本地主机上 nc
没有捕获到任何内容。
我想问题出在我的代码中,但我不确定是哪一行。
为什么我没有收到任何关于 nc
的消息?
代码:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
void error(const char *msg)
{
perror(msg);
exit(0);
}
int main(int argc, char *argv[]) {
//http://www.linuxhowtos.org/C_C++/socket.htm
int sockfd, portno, n;
struct sockaddr_in serv_addr;
struct hostent *server;
const char ip[] = "127.0.0.1";
char buffer[256];
portno = atoi("6666");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
error("ERROR opening socket");
}
/*
server = gethostbyname(argv[1]);
if (server == NULL) {
fprintf(stderr,"ERROR, no such host\n");
exit(0);
}
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
bcopy((char *)server->h_addr,
(char *)&serv_addr.sin_addr.s_addr,
server->h_length);
*/
inet_aton(ip, &serv_addr.sin_addr);
serv_addr.sin_port = htons(portno);
if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0){
error("ERROR connecting");
}
printf("Please enter the message: ");
bzero(buffer,256);
fgets(buffer,255,stdin);
n = write(sockfd,buffer,strlen(buffer));
if (n < 0)
error("ERROR writing to socket");
bzero(buffer,256);
n = read(sockfd,buffer,255);
if (n < 0)
error("ERROR reading from socket");
printf("%s\n",buffer);
close(sockfd);
return(0);
}
一个 sockaddr_in
分为三部分:
- 主持人
你用inet_aton
设置它(假设调用成功;最好添加一些错误检查!) - 端口
你用serv_addr.sin_port = htons(portno);
设置
- 家庭
在你的情况下应该是AF_INET
但是,哎呀,你把它注释掉了!
其他一切看起来都很好。