linux下的socket 编译段错误是怎么回事,求教

comma_yeah 2011-11-05 02:48:32
代码如下,请教各位大神
server端:
#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 3333 /*服务器监听端口号 */



int main()

{

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("socket创建出错!"); exit(1);

}

my_addr.sin_family=AF_INET;

my_addr.sin_port=htons(SERVPORT);

my_addr.sin_addr.s_addr = inet_addr("127.0.0.2");

bzero(&(my_addr.sin_zero),8);

if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)

{

perror("bind出错!");

exit(1);

}

if (listen(sockfd, 5) == -1)

{

perror("listen出错!");

exit(1);

}

while(1)

{

sin_size = sizeof(struct sockaddr_in);
printf("Server waiting\n");

if ((client_fd = accept(sockfd, (struct sockaddr *)&remote_addr, &sin_size)) == -1)

{

perror("accept出错");

continue;

}

printf("received a connection from server ", inet_ntoa(remote_addr.sin_addr));

if (!fork()) { /* 子进程代码段 */

if (send(client_fd, "Hello, you are connected! ", 26, 0) == -1)

perror("send出错!");

close(client_fd);

exit(0);

}

}

}


client端:
#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 3333

#define MAXDATASIZE 100 /*每次最大数据传输量 */

main(){

int sockfd, recvbytes;

char buf[MAXDATASIZE];

struct hostent *host;

struct sockaddr_in serv_addr;

if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1){

perror("socket创建出错!");

exit(1);

}

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=inet_addr("127.0.0.2");

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] = 10;

printf("Received: client",buf);

close(sockfd);

}
万分感谢啊
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
comma_yeah 2011-11-06
  • 打赏
  • 举报
回复
謝謝你,行的[Quote=引用 3 楼 comma_yeah 的回复:]
引用 2 楼 agan04 的回复:

client端:
serv_addr.sin_port=htons(SERVPORT);

serv_addr.sin_addr = *((struct in_addr *)host->h_addr); /* 把这句删了 */

bzero(&amp;(serv_addr.sin_zero),8);
好的,我试试
[/Quote]
comma_yeah 2011-11-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fengying0529 的回复:]
多加点打印 看看到哪边出问题 找到哪一行就好办多了
[/Quote]
我是第一次用linux的gcc寫程序,以前從來沒有用過。。。
fengying0529 2011-11-05
  • 打赏
  • 举报
回复
多加点打印 看看到哪边出问题 找到哪一行就好办多了
sg131971 2011-11-05
  • 打赏
  • 举报
回复
二楼正解!
comma_yeah 2011-11-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 agan04 的回复:]

client端:
serv_addr.sin_port=htons(SERVPORT);

serv_addr.sin_addr = *((struct in_addr *)host->h_addr); /* 把这句删了 */

bzero(&(serv_addr.sin_zero),8);
[/Quote]好的,我试试
agan04 2011-11-05
  • 打赏
  • 举报
回复
client端:
serv_addr.sin_port=htons(SERVPORT);

serv_addr.sin_addr = *((struct in_addr *)host->h_addr); /* 把这句删了 */

bzero(&(serv_addr.sin_zero),8);
qq120848369 2011-11-05
  • 打赏
  • 举报
回复
没听说过编译可以段错误的。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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