求教:unix网络编程-客户端connect报错

dragoncastle 2000-01-07 09:55:00
加精
鄙人刚学unix sock编程,编写一客户端程序,编译成功,但执行报connect

出错,connect error:cannot assign requested address,百思不得其解,

望高手指正。我的邮箱是zcc263@263.net.下面是源代码。


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <sys/wait.h>
#define MYPORT 4950 /* 用户将发送到这个端口 */
#define MAXBUFLEN 100

int main(int argc, char *argv[])
{
int sockfd;
struct sockaddr_in their_addr; /* 联接者的地址信息 */
int numbytes;
char *buf;

if (argc != 3)
{
fprintf(stderr,"usage: talker hostname message\n");
return(1);
}

sockfd=Socket(AF_INET, SOCK_STREAM, 0);

their_addr.sin_family = AF_INET; /* 主机字节序 */
their_addr.sin_port = htonl(MYPORT); /* short, 网络字节序 */
if((their_addr.sin_addr.s_addr = inet_addr(argv[1])) == -1)
{
perror("inet_addr");
return(1);
}
bzero(&(their_addr.sin_zero), 8); /* 对结构赋0值 */
Connect(sockfd,&their_addr,sizeof(struct sockaddr));

Writen(sockfd,argv[2],sizeof(argv[2]));

if((numbytes=Readn(sockfd,&buf,MAXBUFLEN))<=0)
printf("未接收到响应\n");
else
{
buf[numbytes]=0;
printf("%s\n",buf);
}

close(sockfd);

return(0);
}

int Socket(int family,int type,int protocol)
{
int n;

if((n=socket(family,type,protocol))<0)
err_quit("socket error");

return(n);
}

int Connect(int sockfd,struct sockaddr *their_addr,int addrlen)
{
int n;

if((n=connect(sockfd,their_addr,addrlen))<0)
err_quit("connect error");

return(n);
}

int Readn(int sockfd,void *buf,size_t n)
{
ssize_t nleft;
ssize_t nread;
char *ptr;

ptr=buf;
nleft=n;
while(nleft>0)
{
if((nread=read(sockfd,ptr,nleft))<0)
if(errno==EINTR) nread=0;
else err_quit("read error");
else if(nread==0) break;

nleft-=nread;
ptr+=nread;
}

return(n-nleft);
}

int Writen(int sockfd,char *msg,size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;

ptr=msg;
nleft=n;
while(nleft>0)
{
if((nwritten=write(sockfd,ptr,nleft))<=0)
if(errno==EINTR) nwritten=0;
else err_quit("write error");

nleft-=nwritten;
ptr+=nwritten;
}

return(n);
}

int err_quit(char message[20])
{
perror(message);
exit(1);
}
...全文
265 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hem 2001-05-18
  • 打赏
  • 举报
回复
参考
bbzy 2001-01-15
  • 打赏
  • 举报
回复
谢谢
分数另开问题奉上!
bbzy 2001-01-15
  • 打赏
  • 举报
回复
to fjp
可以帮我看下这个程序摸?
connect” 出现连接请求错误“
网络是通的
#define DEBUG
#include <sys/types.h>
#include <sys/netinet/in.h>
#include <errno.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netdb.h>
main(argc, argv)
int argc ;
char *argv ;
{
struct sockaddr_in since;
struct hostent *hp;
char buf[20];
int ii,sock ;
/*
if (argc!=2) {
printf("\n main argv error !");
exit(1);
}
*/
bzero(&since, sizeof(struct sockaddr_in));
hp=gethostbyname("HNXX12");
if (hp==NULL) {
printf("\n host name error");
exit(1);
}

#ifdef DEBUG
printf("\n host name is obtain !");
#endif

bcopy(hp->h_addr, (char *)&since.sin_addr, hp->h_length);

if ((sock=socket(AF_INET,SOCK_STREAM,0))<0) {
printf("\n sock err");
exit(1);
}

since.sin_family=AF_INET ;
since.sin_port=htons(2200);
since.sin_addr=*((struct in_addr *)hp->h_addr);

#ifdef DEBUG
printf("\n step 3");
#endif
if (connect(sock,(struct sockaddr *)&since,sizeof(struct sockaddr))<0) {
fjp 2000-01-10
  • 打赏
  • 举报
回复
Dragoncastle:

你的问题出在下面的语句
their_addr.sin_port = htonl(MYPORT); /* short, 网络字节序 */
请将htonl换成htons一切OK!
fjp.

19,610

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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