当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 我是一个新手,写了一个socket的程序,但报错,请各位帮忙分析一下!坐等……
帖子发表于 : 2010-06-18 15:59 

注册: 2009-07-26 9:33
帖子: 4
送出感谢: 0 次
接收感谢: 0 次
/************Socket编程实例*****************/
//代码实例中的服务器通过socket连接向客户端发送字符串"Hello, you are connected!"。
//只要在服务器上运行该服务器软件,在客户端运行客户软件,客户端就会收到该字符串。
//该服务器软件代码如下:


#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 <sys/wait.h>


#define SERVPORT 3333 /*服务器监听端口号 */
#define BACKLOG 10 /* 最大同时连接请求数 */
#define MAXDATASIZE 100 /*每次最大数据传输量 */


int main()
{
pthread_t sData;
pthread_create(&sData, NULL, (void*)&server_handel, NULL);
pthread_t rData;
pthread_create(&rData, NULL, (void*)&client_handel, NULL);

}


void server_handel()
{
int sockfd,client_fd; //sock_fd:监听socket;client_fd:数据传输socket
int sin_size;
 struct sockaddr_in my_addr; //本机地址信息
 struct sockaddr_in remote_addr; // 客户端地址信息

if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
  perror("failed 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("failed bind!!");
   exit(1);
}
 if(listen(sockfd, BACKLOG) == -1) //网络监听
{
perror("failed listen!!");
  exit(1);
 }

 while(1)
{
  sin_size = sizeof(struct sockaddr_in);
  if((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)
{
     perror("failed accept!!");
     continue;
  }
  printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
  if (!fork()) /* 子进程代码段 */
{
if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1)
{
perror("failed send!!");
close(client_fd);
exit(0);
}
  }
 }
close(client_fd);
pthread_exit(NULL);
}


/*************客户端程序*************/
void client_handel(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!\n");
exit(1);
}
 if((host=gethostbyname(argv[1]))==NULL)
{
herror("failed gethostbyname!!");
exit(1);
}
 if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("failed 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("failed connect!!");
exit(1);
}
 if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) ==-1)
{
perror("failed recv!!");
exit(1);
}
 buf[recvbytes] = '\0';
 printf("Received: %s",buf);
 close(sockfd);
}

root@ubuntu:/work# gcc -o connect test.c
出错信息如下:
test.c: In function ‘server_handel’:
test.c:70: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’
/tmp/ccm79JGX.o: In function `main':
test.c:(.text+0x2a): undefined reference to `pthread_create'
test.c:(.text+0x4f): undefined reference to `pthread_create'
collect2: ld returned 1 exit status


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 我是一个新手,写了一个socket的程序,但报错,请各位帮忙分析一下!坐等……
帖子发表于 : 2010-06-18 16:19 
头像

注册: 2008-03-25 15:49
帖子: 25877
地址: 谁知道?
送出感谢: 8
接收感谢: 10
引用:
test.c:70: warning: format ‘%s’ expects type ‘char *’, but argument 2 has type ‘int’

这是哪一行的?


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 我是一个新手,写了一个socket的程序,但报错,请各位帮忙分析一下!坐等……
帖子发表于 : 2010-06-18 16:33 

注册: 2009-07-26 9:33
帖子: 4
送出感谢: 0 次
接收感谢: 0 次
printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 我是一个新手,写了一个socket的程序,但报错,请各位帮忙分析一下!坐等……
帖子发表于 : 2010-06-18 16:58 
头像

注册: 2008-03-25 15:49
帖子: 25877
地址: 谁知道?
送出感谢: 8
接收感谢: 10
printf("received a connection from %s:%d\n",(char *)inet_ntoa(remote_addr.sin_addr),ntohs(remote_addr.sin_port));

inet_notoa 需要两个参数的吧.


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译