【发布时间】:2014-11-06 23:56:04
【问题描述】:
我正在运行 linux mint 并在命令终端中输入了一些命令来连接到我的本地主机,但它一直说连接失败。
这是我输入的内容:
echo "echo test" | ./<my executable> localhost <port #>
这是我的连接代码:
int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen);
if (r < 0) {
printf("Connection failed\n");
exit(1);
}
这里是完整的代码:
int main(int argc, char *argv[]) {
if (argc != 3) {
printf("Invalid arguments\n");
exit(1);
}
char *serverIP = argv[1]; /*Server hostname*/
char *portNumber = argv[2]; /*Port Number*/
void *numericAddress;
char addrBuffer[INET6_ADDRSTRLEN];
in_port_t port;
char buffer_stdin[65535];
char buffer_stdout[65535];
int bytes_read = 0;
int bytes_written = 0;
/*getting integral number of string representation of port number*/
in_port_t servPort = atoi(argv[2]);
/*------------------get binary number of hostname-----------------*/
struct addrinfo addrCriteria;
memset(&addrCriteria, 0, sizeof(addrCriteria));
addrCriteria.ai_family = AF_INET;
addrCriteria.ai_socktype = SOCK_STREAM;
addrCriteria.ai_protocol = IPPROTO_TCP;
struct addrinfo *addrList;
int rtnVal = getaddrinfo(serverIP, portNumber, &addrCriteria, &addrList);
if (rtnVal != 0) {
printf("getaddrinfo() failed\n");
exit(1);
}
numericAddress = &((struct sockaddr_in *) (addrList->ai_addr))->sin_addr;
/*Converting port to binary*/
((struct sockaddr_in *)(addrList->ai_addr))->sin_port = htons(servPort);
/*----------------------------------------------------------------*/
inet_ntop(addrList->ai_addr->sa_family, numericAddress, addrBuffer, sizeof(addrBuffer));
printf("IP ADDRESS: %s\n", addrBuffer);
/*Creating socket*/
int sock = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
if (sock < 0) {
printf("error creating socket\n");
exit(1);
}
/*Establish connection to the echo server*/
int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen);
if (r < 0) {
perror("Connection failed\n");
exit(1);
}
/*Reading from stdin and writing to socket until stdin ends
bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin));
write(sock, buffer_stdin, bytes_read);*/
while ((bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin)-1)) > 0) {
write(sock, buffer_stdin, bytes_read);
}
/*Shutting down write end of socket*/
int r_shutdown = shutdown(sock, SHUT_WR);
if (r_shutdown < 0) {
printf("Shutting down write end of socket failed\n");
exit(1);
}
/*Reading from socket and writing to stdout until socket ends*/
while ((bytes_read = read(sock, buffer_stdout, sizeof(buffer_stdout)-1)) > 0) {
write(1, buffer_stdout, bytes_read);
}
close(sock);
exit(0);
}
我需要安装一些东西来连接到本地主机吗?
谢谢
编辑:好的,这是更新:
首先我在命令终端中输入:chmod a+x exe(其中 exe 是我们的 UDP 服务器) 然后我输入: ./exe 例如./exe 2525 然后我输入: echo "echo test" | ./本地主机
但是当这种情况发生时,终端不会返回“echo test”,它只是坐在那里,就像它正在等待用户的输入一样,或者就像它陷入无限循环一样。
【问题讨论】:
-
您没有向我们展示足够的代码。另外,使用
perror("Connection failed\n");而不是printf("Connection failed\n");查看连接失败的原因 -
好吧我试试
-
它说“:连接被拒绝”。我将发布我的其余代码
-
好的,这意味着没有人在监听那个端口(所以没有人接受你的连接请求)
-
我们的教授为我们提供了一个服务器。我们连接到服务器,写入套接字,然后从套接字读取并写回 stout。我们无权访问服务器中的代码。