| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 889 人关注过本帖
标题:linux socket简单问题
只看楼主 加入收藏
zzjking
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-7-16
收藏
 问题点数:0 回复次数:3 
linux socket简单问题

运行客户代码后出现错误:
connection refused.
请问这是为什么?看了一些网站说是服务器端没有监听,可是服务器端运行正常啊。。。




主机:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <unistd.h>
#define SERVPORT 2121
#define BACKLOG 10
main()
{
int sockfd,client_fd,recv_client;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
char temp[100];

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket error"); exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr = inet_addr("192.168.1.103");// INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
{
perror("bind error");
exit(1);
}
if (listen(sockfd, BACKLOG) == -1)
{
perror("listen error");
exit(1);
}
while(1)
{
socklen_t sin_size = sizeof(struct sockaddr_in);
if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
{
perror("accept error");
continue;
}
printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
if (!fork())
{
if((recv_client=recv(sockfd,temp,100,0))==-1)
{
perror("recv_client error");
exit(0);
close(client_fd);
}
if(strcmp(temp,"get")==0)
{
printf("get\n");
}
if(strcmp(temp,"put")==0)
{
printf("put\n");
}
else
{
printf("clinet requset error,check argv[2]\n");
exit(0);
}
}
}
}



客户:
#include<stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <unistd.h>
#define SERVPORT 3343
#define MAXDATASIZE 100
main(int argc, char *argv[])
{
int sockfd, recvbytes,host_fd;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;

if (argc < 2)
{
fprintf(stderr,"Please enter the server's hostname!\n");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL)
{
herror("gethostbyname error");
exit(1);
}
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket error");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(SERVPORT);
serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
bzero(&(serv_addr.sin_zero),8);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect error");
exit(1);
}
if((host_fd=send(sockfd,&argv[2],sizeof(&argv[2]),0))==-1)
{
perror("host_fd error");
exit(1);
}
close(sockfd);
}

搜索更多相关主题的帖子: socket linux 简单问题 
2007-09-18 10:59
酒肉弥勒佛
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:399
专家分:0
注 册:2006-6-6
收藏
得分:0 
端口都不一样,怎么能通信啊
都要用服务器的端口

编程是为了提高效率,好的程序是因为他的高效;在编程的道路上,永远追逐高效的算法
2007-09-18 13:41
学c
Rank: 1
等 级:新手上路
帖 子:44
专家分:0
注 册:2007-9-17
收藏
得分:0 

两个程序都编译通过了吗?你运行客户端时输入运行参数了吗?

2007-09-18 13:57
beauty20
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-7-29
收藏
得分:0 
好帖!支持楼主!:)

____________________
[url=http://phone-lookup.]phone-lookup info for 843-915[/url]
2007-09-18 18:21
快速回复:linux socket简单问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015747 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved