请教:SOCKET编程问题

bestwaqh 2009-07-24 09:56:07
小弟最近在学习《UNIX网络编程》这本书,但是遇到点问题
我现在在一个虚拟机上搞了两套系统,一个是SUSE(192.168.42.128),一个是REDHAT(192.168.42.129),这两个系统可以PING通。现在写了一程序在REDHAT上运行,通过TCP协议去访问SUSE的daytime服务。代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MAXLINE 4096
#define SA struct sockaddr

int
main(int argc, char **argv)
{
int sockfd, n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr;
if(argc != 2)
{
printf("usage:a.out<IPaddress>\n");
exit(1);
}
if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
{
printf("socket error\n");
exit(1);
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(13);
if(inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
{
printf("inte_pton error for %s\n", argv[1]);
exit(1);
}
if(connect(sockfd, (SA *)&servaddr, sizeof(servaddr)) < 0)
{
printf("connect error\n");
exit(1);
}
while( ( n = read(sockfd, recvline, MAXLINE)) > 0)
{
recvline[n] = 0;
if(fputs(recvline, stdout) == EOF)
{
printf("fputs error\n");
exit(1);
}
}
if(n < 0)
{
printf("read error\n");
exit(1);
}
exit(0);
}

编译生成可执行文件后,在REDHAT下运行: ./a.out 192.168.42.128 提示connect error;
如果运行:./a.out 192.168.42.129 返回:24 JUL 2009 09:23:52 CST
两个系统的daytime服务是开通的,但为什么不能连到对方的daytime服务上呢?
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
mosaic 2009-07-25
  • 打赏
  • 举报
回复
先用telnet 试一下,在REDHAT下:
telnet 192.168.42.128 13

看看能不能返回时间。
如果telnet可以的话,就是程序有问题了。
bestwaqh 2009-07-25
  • 打赏
  • 举报
回复
貌似我么说清楚?
汗晕倒 2009-07-25
  • 打赏
  • 举报
回复
看程序看不出问题~~~ 不懂 菜鸟飘过
bestwaqh 2009-07-25
  • 打赏
  • 举报
回复
不能返回时间,两边都不行
是不是我网络连的有问题?
我虚拟机用的桥接方式和主机相连的

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧