linux下socket编程调试connect出错问题

Toria2015 2012-07-31 11:02:40
服务器代码socket1.c
#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>
#define SERVPORT 2300 /*服务器监听端口号 */
#define BACKLOG 10 /*最大同时连接请求数 */
main(){
int sockfd,client_fd;
struct sockaddr_in my_addr;
struct sockaddr_in remote_addr;
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket创建出错!");
exit(1);
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVPORT);
my_addr.sin_addr.s_addr=INADDR_ANY;
bzero(&(my_addr.sin_zero),8);
if(bind(sockfd,(struct sockaddr *)&my_addr,sizeof(struct sockaddr))==-1){
perror("bind出错!");
exit(1);
}
if(listen(sockfd,BACKLOG)==-1)
{
perror("listen出错!");
exit(1);
}
while(1){
int sin_size=sizeof(struct sockaddr_in);
if((client_fd=accept(sockfd,(struct sockaddr *)&remote_addr,&sin_size))==-1)
{
perror("accept出错!");
continue;
}
printf("received a connection from %s",inet_ntoa(remote_addr.sin_addr));
if(!fork()){
if(send(client_fd,"Hello,you are connect!",26,0)==-1)
perror("send出错!");
close(client_fd);
exit(0);
}
close(client_fd);
}
}

客户端代码socket3.c
#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>
#define SERVPORT 2300
#define MAXDATASIZE 100 /*每次最大数据传输量 */
main(int argc, char *argv[]){
int sockfd,recvbytes;
char buf[MAXDATASIZE];
struct hostent *host;
struct sockaddr_in serv_addr;
if(argc<2){
fprintf(stderr,"Please enter the server's hostname!");
exit(1);
}
if((host=gethostbyname(argv[1]))==NULL){
perror("gethostbyname出错!");
exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
perror("socket创建出错!");
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出错!");
exit(1);
}
if((recvbytes=recv(sockfd,buf,MAXDATASIZE,0))==-1){
perror("recv出错!");
exit(1);
}
buf[recvbytes]='\0';
printf("Received:%s",buf);
close(sockfd);
}

在命令行./socket1 &
再./socket3 127.0.0.1
给出connect出错!:Connection refused
...全文
309 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2012-07-31
  • 打赏
  • 举报
回复
service iptables stop
Toria2015 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 1 楼 的回复:

把防火墙关了试试

敢问怎么关。。。
[/Quote]
我用的ubuntu12.04 貌似没有直接关闭防火墙的命令
Toria2015 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把防火墙关了试试
[/Quote]
敢问怎么关。。。
邹亚鹏 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把防火墙关了试试
[/Quote]
试试~~
IVERS0N 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

把防火墙关了试试
[/Quote]

luciferisnotsatan 2012-07-31
  • 打赏
  • 举报
回复
把防火墙关了试试
Toria2015 2012-07-31
  • 打赏
  • 举报
回复
我关了,连用 的四个命令
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
Toria2015 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

service iptables stop
[/Quote]
ubuntu不认识这个命令的
Toria2015 2012-07-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

service iptables stop
[/Quote]
网上说这个不是红帽系统的命令吗?
Linux Socket服务器端编程实例 例:建立一个Linux TCP服务器,等待客户端的连接请求,一旦接收到客户端请求,将客户端的IP地址和端口号打印出来,并且向客户端发送"Hello!Socket communication world!"字符串,然后关闭服务器。 0 Linux-Socket-服务器编程实例全文共13页,当前为第1页。 Linux Socket服务器端编程实例 Socket服务器编程中的头文件 #include stdlib 头文件即standard library标准库头文件。 该文件包含了的C语言标准库函数的定义,常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。 1 Linux-Socket-服务器编程实例全文共13页,当前为第2页。 Linux Socket服务器端编程实例 #include stdio 就是指 "standard input & output"(标准输入输出),所以,源代码中如用到标准输入输出函数时,就要包含这个头文件! 例如c语言中的 printf("%d",i); scanf("%d",&i);等函数。 2 Linux-Socket-服务器编程实例全文共13页,当前为第3页。 Linux Socket服务器端编程实例 #include 提供错误号errno的定义。查看错误代码errno是调试程序的一个重要方法。当linux C api函数发生异常时,一般会将errno变量(需include errno.h)赋一个整数值,不同的值表示不同的含义,可以通过查看该值推测出错的原因。 3 Linux-Socket-服务器编程实例全文共13页,当前为第4页。 Linux Socket服务器端编程实例 #include string.h是预先定义好的函数库头文件,里面定义了一些字符串函数,如bzero等,添加这个头文件后才可以使用和字符串相关的操作函数 4 Linux-Socket-服务器编程实例全文共13页,当前为第5页。 Linux Socket服务器端编程实例 #include Unix和Linux特有的头文件,主要定义了与网络有关的结构、变量类型、宏、函数等。所以在进行Socket网络编程时,必须要包含这个头文件。 5 Linux-Socket-服务器编程实例全文共13页,当前为第6页。 Linux Socket服务器端编程实例 #include 在应用程序源文件中包含 以访问 整型、长整型和指针数据模型的定义。所有这些类型在 32位编译环境中保持为 32 位值,并会在64位编译环境中增长为 64 位值。 6 Linux-Socket-服务器编程实例全文共13页,当前为第7页。 Linux Socket服务器端编程实例 #include 数据结构sockaddr_in就定义在这个头文件中。 #include 这个头文件提供socket函数及相关数据结构 7 Linux-Socket-服务器编程实例全文共13页,当前为第8页。 Linux Socket服务器端编程实例 main函数中的参数 在Linux C语言中,main函数通常写作以下形式: int main(int argc,char *argv[]) 其中的两个参数argc和*argv[]是什么含义呢? 8 Linux-Socket-服务器编程实例全文共13页,当前为第9页。 Linux Socket服务器端编程实例 argc:命令行总的参数的个数,即argv中元素的个数。 *argv[ ]:字符串数组,用来存放指向字符串参数的指针数组,每一个元素指向一个参数。 9 Linux-Socket-服务器编程实例全文共13页,当前为第10页。 Linux Socket服务器端编程实例 argv[0]:指向程序的全路径名。 argv[1]:指向在DOS命令行中执行程序名后的第一个字符串。 argv[2]:指向第二个字符串。 … … 10 Linux-Socket-服务器编程实例全文共13页,当前为第11页。 Linux Socket服务器端编程实例 比如编译好的程序为my.exe 在命令行执行 my.exe 1 2 3 那argc就是4,argv[0]是"my.exe",argv[1]是"1",argv[2]是"2",argv[3]是"3"; 11 Linux-Socket-服务器编程实例全文共13页,当前

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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