首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

socket通讯服务端绑定失败

2012-09-17 
socket通信服务端绑定失败在root用户下可以绑定成功,但在普通用户下到绑定函数就报错 bind: Invalid or in

socket通信服务端绑定失败
在root用户下可以绑定成功,但在普通用户下到绑定函数就报错 bind: Invalid or incomplete multibyte or wide character
这是为什么啊,我的程序中有问题么???谢谢你的回答!!!
#include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include <unistd.h>
 #include <stdio.h>
 #include <errno.h>
 #include "include.h"
 
 /*服务器端套接字*/
 int socketserver (char *pcPort)
 {
 printf("socket服务端开始\n");
 
 /*变量定义*/
 int iListen; /*监听套接字描述符*/
 int iTransfer; /*数据传送套接字描述符*/
 int iJudge = 0; /*存储返回值判定操作是否成功*/
 int iIndex = 0; /*索引标记*/
 int iMsgid; /*报村消息队列描述符*/
 int iShmid;
 int iLengthaddr = sizeof(struct sockaddr_in); /*存储地址长度*/
 int iFor; /*for语句变量*/
 int iRet;
 struct sockaddr_in stLocaladdr; /*本机地址信息存放地址结构体*/
 struct sockaddr stRemoteaddr; /*远端地址信息存放地址结构体*/
 struct stClient stAccept; /*接收客户端发过来的信息*/
 struct stServer stTemp;
 struct stShmItem stWrite;
 
 int iCounter = 0;
 
 
 
 /*创建套接字*/
 iListen = socket(AF_INET, SOCK_STREAM, 0); /*创建socket,互联网协议族,面向TCP协议联系*/
 if(iListen == -1)
 {
 printf("socket创建失败\n");
 return 0;
 }
 else
 {
 printf("socket创建成功\n");
 printf("socket ID是 %d\n", iListen);
 }
 
 
 /*地址结构题初始化*/
 bzero (&stLocaladdr, sizeof(stLocaladdr));
 stLocaladdr.sin_family = AF_INET; /*socket使用TCP协议族*/ 
 stLocaladdr.sin_port = htons(atoi(pcPort)); /*端口的字节顺序转换成网络顺序的字节*/
 stLocaladdr.sin_addr.s_addr = htonl(INADDR_ANY);
 
 printf("端转换为数字端口值为%d\n", atoi(pcPort));
 printf("stLocaladdr.sin_port为%d\n", ntohs(stLocaladdr.sin_port));
 
 /*绑定服务器地址、端口和socket */
 iJudge = bind(iListen, (struct sockaddr*)&stLocaladdr, sizeof(stLocaladdr));
 if(iJudge == -1)
 {
 printf("绑定本机地址信息出错\n");
 perror("bind");
 return 0;
 }
 else
 {
 printf("绑定地址成功\n");
 printf("绑定端口为%d\n", htons(atoi(pcPort)));
 printf("绑定IP地址为%ld\n", htonl(stLocaladdr.sin_addr.s_addr));
 }
 
 
 /*启用监听*/
 iJudge = listen(iListen, BACKLOG); /*监听最大完成连接队列数为10*/
 if(iJudge == -1)
 {
 printf("监听出错\n");
 perror("listen");
 }
 else
 {
 printf("listenning......\n");
 }
 
 /*接受链接请求*/
 while(1)
 {
 
 iTransfer = accept(iListen, &stRemoteaddr, &iLengthaddr);
 
 if (iTransfer == -1)
 {
 printf("接受连接请求失败\n");
 perror("accept");
 continue;
 }
 
 if(!fork()) 
 {
 printf("多进程\n");
 iCounter++;
 }
 }
 
 close(iListen); /*关闭监听套接字*/
 return 0;
 }
 
 

[解决办法]
你用的是 1024以下的? 换大于1024的

热点排行