标题: 这个程序为什么没有建立起套接字
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 51(积分有什么用?)
帖子 4804
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2008-4-28 10:53  资料  个人空间  短消息  加为好友 

Linux爱好者的盛会


QUOTE:
原帖由 海天一色 于 2008-4-28 10:37 发表
6[        Og_,RWLinux伊甸园论坛是啊,运行的结果就是不停的显示
P RC
j+NQ sS
server waitingwww.linuxeden.com%Zo        g xSp
server waiting
,E R@s:g dN^server waiting
4Q\,{%]6@hVFel没有创建出server_socket的描述符,而这个描述符是用来与客户端通信的~t.FF!`&Lg
bind(server_sockfd,(struct sockaddr *)&server_address,server_len) 这句的意识是给套接字server_sockfd起名叫server_socket,用listen监听它,用accept“再”分配一个套接字用于和该客户端通信我的理解没有错吧。

X9I,sn P3jwk
您对 socket 的理解真的有问题 这段 code 就是应该不停的显示 server waiting 的, 没什么奇怪的. 还有, 给 socket 起名的说法是不准确的, 实际上 socket 没有什么名字





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
不容错过的IBM 集群技术资源汇总
海天一色
实习记者
Rank: 5Rank: 5
注册用户



UID 49855
精华 0
积分 46(积分有什么用?)
帖子 438
阅读权限 10
注册 2003-7-7
状态 离线
发表于 2008-4-28 11:54  资料  个人空间  短消息  加为好友 
因为在查看文件时,没有发现描述符啊。8tJ#A X.Ui1g
w]

还有一处不太明白:P*J
fC        x`

当accept等待客户端时程序会挂起来吧,所以不应该一直显示server waiting,当有一个连接进来时会进行读写,然后销毁再重新等待客户端的连接。

顶部
不容错过的IBM 集群技术资源汇总
mgqw
小试牛刀
Rank: 2
注册用户



UID 190744
精华 0
积分 40(积分有什么用?)
帖子 104
阅读权限 10
注册 2007-4-19
状态 离线
发表于 2008-4-28 11:56  资料  个人空间  短消息  加为好友  QQ
你这段代码在while循环里面套了个输出,运行结果当然会一直输出server waiting了。www.linuxeden.com\v)gM(X        p^:`p
    而且这个服务器程序一次只能为一个client服务,从客户那里读取一个字符,增加那个字符的值,然后写回client。要想看到明确的提示可以加上一段输出代码:
        z'a*HQs5rsLinux伊甸园论坛5y2[ k!\XFz
read(…………)
l#U'~D\B
wi6w
printf("得到client数据:%c",ch)x o.w y6p5rd
ch++;
'Cr"Y k`6Llprintf("写回client数据:%c",ch)%c
d uV9b5N]

write(…………)
(W{J};Y
s3z"n
close(client_sockfd);

顶部
不容错过的IBM 集群技术资源汇总
海天一色
实习记者
Rank: 5Rank: 5
注册用户



UID 49855
精华 0
积分 46(积分有什么用?)
帖子 438
阅读权限 10
注册 2003-7-7
状态 离线
发表于 2008-4-28 11:58  资料  个人空间  短消息  加为好友 
啊。。。
&PWG
n|Z^www.linuxeden.com
更正下listen不是监听作用,而是设置队列的。#~2Ey
{t ya s

书上是这么说的呀!

顶部
海天一色
实习记者
Rank: 5Rank: 5
注册用户



UID 49855
精华 0
积分 46(积分有什么用?)
帖子 438
阅读权限 10
注册 2003-7-7
状态 离线
发表于 2008-4-28 12:01  资料  个人空间  短消息  加为好友 
哦,也许是我没有说明白#?0L]!jb|
我的意思是在while循环里当执行到accept时由于没有客户端连接进来,所以应该“停”在这步吧,因此不能执行后面的内容,循环也就不应该?**葱辛恕

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 25(积分有什么用?)
帖子 5578
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2008-4-28 12:17  资料  个人空间  短消息  加为好友 
要不还是检查下accept的返回再做操作吧





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
海天一色
实习记者
Rank: 5Rank: 5
注册用户



UID 49855
精华 0
积分 46(积分有什么用?)
帖子 438
阅读权限 10
注册 2003-7-7
状态 离线
发表于 2008-4-28 12:18  资料  个人空间  短消息  加为好友 
我对套接字的理解就是好比你要运货
!e.iDlc NzLinux伊甸园论坛首先你得选择下运输的方式和工具,比如铁路的火车普通方式,这对应的就是建立一个套接字用socket函数来具体实现。
-yn!V;Y*Ig再有由于你不是专线,所以你的货会和别人的在一起,你还要在包装上写地址,对应的是由struct sockaddr_un来实现如地址,端口号、名称等。hF
E0\l{x bm!O

而由于在电脑里是先有人收货,才有人发货,因此为了收货,你还得用些资源就是建立个邮局接收货物要在该邮局注册下你的名字等信息,对服务器来说就是用bind函数来实现的。
I0YE9R/CmhLinux伊甸园论坛最后,在程序里accept就是“邮局”了,当有货到时它会指派一个新人来做处理。

顶部
海天一色
实习记者
Rank: 5Rank: 5
注册用户



UID 49855
精华 0
积分 46(积分有什么用?)
帖子 438
阅读权限 10
注册 2003-7-7
状态 离线
发表于 2008-4-28 12:20  资料  个人空间  短消息  加为好友 
我对套接字的理解对吗??

顶部
dearvoid
版主
Rank: 7Rank: 7Rank: 7
Clark J. Wang



UID 26605
精华 26
积分 51(积分有什么用?)
帖子 4804
阅读权限 100
注册 2002-10-12
来自 Beijing, China
状态 离线
发表于 2008-4-28 12:38  资料  个人空间  短消息  加为好友 
俺亲自编译运行了上面的 code, 没有问题啊





'
◆ 发帖时请【突出主题】, 以便您的问题能够及时得到回复
◆ 发帖时请将您的【代码】或者【脚本】写在 [code] 和 [/code] 中间
顶部
海天一色
实习记者
Rank: 5Rank: 5
注册用户



UID 49855
精华 0
积分 46(积分有什么用?)
帖子 438
阅读权限 10
注册 2003-7-7
状态 离线
发表于 2008-4-28 16:22  资料  个人空间  短消息  加为好友 
这次我打印了每个步骤的状态,发现在bind时就出错了返回-1,并说没有权限不允许。为什么呢??

顶部
 



当前时区 GMT+8, 现在时间是 2008-5-12 06:57

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.050605 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP