打印

再帮忙看个TCP客户端程序

[复制链接]
1980|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zshihao|  楼主 | 2012-11-1 11:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先贴程序:
/******* 客户端程序 client.c ************/
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
#include <netdb.h>
int main(int argc, char *argv[])
{
int sockfd;
char buffer[1024];
struct sockaddr_in server_addr;
struct sockaddr_in new_fd;
struct hostent *host;
int portnumber,nbytes;
  char buff[1024];
  
if(argc!=3)
{
  fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
  exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
  fprintf(stderr,"Get host name error\n");
  exit(1);
}
if((portnumber=atoi(argv[2]))<0)
{
  fprintf(stderr,"Usage:%s hostname portnumber\a\n",argv[0]);
  exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
  fprintf(stderr,"Socket Creat Error:%s\a\n",strerror(errno));
  exit(1);
}
else
  printf("Socket Creat .......[ok]\nThe Descriptor is %d\n",sockfd);
printf("1\n");
bzero(&server_addr,sizeof(server_addr));
printf("2\n");
server_addr.sin_family=AF_INET;
printf("3\n");
server_addr.sin_port=htons(portnumber);
printf("4\n");
server_addr.sin_addr =*((struct in_addr *)host->h_addr);
/*server_addr.sin_addr=*((struct in_addr *)host->h_addr); */
  printf("ready to connet.....");
if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
  fprintf(stderr,"Connect Error:%s\a\n",strerror(errno));
  exit(1);
}
else
  printf("Connect to Host.....[ok]\n");
while(1)
{
    bzero(buffer,sizeof(buffer));
    printf("I am ready to read STDIN_FILENO\n");
  if((nbytes=read(STDIN_FILENO,buff,1024))==-1)
  {
   fprintf(stderr,"Send Error:%s\n",strerror(errno));
   exit(1);
  }
    printf("I have read STDIN_FILENO\n");
    sleep(3);
  buff[nbytes]='\n';
  buff[nbytes+1]='\0';
printf("I am ready to write buff to sockfd\n");
     sleep(1);
  if((write(sockfd,buff,strlen(buff)))==-1)   
  {
   perror("send");
  }
  sleep(3);
  printf("I have written buff to sockfd\n");
  sleep(3);
  printf("I am ready to read sockfd\n");
  bzero(buffer,sizeof(buffer));
  if((nbytes=read(sockfd,buffer,1024))==-1)
  {
   fprintf(stderr,"Send Error:%s\n",strerror(errno));
   exit(1);
  }
  buffer[nbytes]='\n';
  printf("I have received:%s\n",buffer);
  
  sleep(1);
}
/* 结束通讯 */
/*close(sockfd);
exit(0); */
}

也是很简单的一个程序,我在虚拟机与一个TCP调试工具进行连接已经成功,可在9260板子上跑,就停在了打印的4处,等一会就会出现time out 然后打印 ready to connect。。。。然后就没有动静了,这是怎么回事啊。。。。。。。

相关帖子

沙发
阿南| | 2012-11-1 14:09 | 只看该作者
说明没有连接成功,先测试一下和9260板子的网络是否连接正常

使用特权

评论回复
板凳
jlass| | 2012-11-1 15:13 | 只看该作者
server_addr.sin_addr =*((struct in_addr *)host->h_addr);
是这句话没执行成功?
赋值语句也会失败?
看看楼下什么说

使用特权

评论回复
地板
zshihao|  楼主 | 2012-11-1 15:21 | 只看该作者
赋值这句成功了,是ready to connect。。。这句后面没加换行,加完后正常出现,应该就是停到了连接上,是不是跟我的调试工具有关啊,嵌入式需要专门的调试工具?我的调试工具名称是“TCP&UDP测试工具”,用虚拟机测试的时候老顺利了。。。。

使用特权

评论回复
5
zshihao|  楼主 | 2012-11-1 16:02 | 只看该作者
终于找到原因了,应该是调试工具的原因,又下载了个,连接收发都很顺利。全名是“TCP-UDP应用开发调试助手V3.1“,压缩包名字是”TCPtoUDPV31CN“,压缩包大小665KB。血和泪的教训告诉了我,用错软件害死人啊。。。。给大家个借鉴。。。。

使用特权

评论回复
6
阿南| | 2012-11-1 16:30 | 只看该作者
呵呵呵

使用特权

评论回复
7
jlass| | 2012-11-2 09:21 | 只看该作者
应该说“TCP-UDP应用开发调试助手V3.1“的作者找到原因了

问题解决了就好:)

使用特权

评论回复
8
原野之狼| | 2012-11-2 10:41 | 只看该作者
呵呵 在Linux下的话  用啥助手呀
nc命令搞定  
还有就是多用抓包工具

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

10

帖子

0

粉丝