您的位置:首页 > 运维架构 > Linux

linux c socket学习 server&client --->code

2014-06-17 16:59 357 查看
big endian

0x1234

大端:被解释为 0x1234

小端: 0x3412

htonl

htons

发送数据时,主机数据类型转换成网络顺序

socket

bind

connect

listen

accept

send

recv

服务器:

socket() 创建--->bind()--->listen()---->accept()阻塞,等待客户端--->读写交互

客户端:

socket() 创建---->connect()------> 读写交互

client:

#include<stdlib.h>

#include<stdio.h>

#include<errno.h>

#include<string.h>

#include<netdb.h>

#include<sys/types.h>

#include<netinet/in.h>

#include<sys/socket.h>

#define portnumber 3333

int main(int argc, char *argv[])

{

int sockfd;

struct sockaddr_in server_addr;

struct hostent *host;

char buffer[1024];

if(argc!=2)

{

fprintf(stderr,"usage:%s hostname\a\n",argv[0]);

exit(1);

}

if((host=gethostbyname(argv[1]))==NULL)

{

fprintf(stderr,"gethostname error\n");

exit(1);

}

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

{

fprintf(stderr,"socket error: %s\n\a",strerror(errno));

exit(1);

}

bzero(&server_addr,sizeof(server_addr));

server_addr.sin_family=AF_INET;

server_addr.sin_port=htons(portnumber);

server_addr.sin_addr=*((struct in_addr *)host->h_addr);

if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)

{

fprintf(stderr,"connect error: %s\n\a",strerror(errno));

exit(1);

}

printf("please input char: \n");

fgets(buffer,1024,stdin);

write(sockfd,buffer,strlen(buffer));

close(sockfd);

}


server:

#include<stdlib.h>

#include<stdio.h>

#include<errno.h>

#include<string.h>

#include<netdb.h>

#include<sys/types.h>

#include<netinet/in.h>

#include<sys/socket.h>

#define portnumber 3333

int main(int argc, char *argv[])

{

int sockfd,new_fd;

struct sockaddr_in server_addr;

struct sockaddr_in client_addr;

int sin_size;

int nbytes;

char buffer[1024];

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

{

fprintf(stderr,"socket error: %s\n\a",strerror(errno));

exit(1);

}

bzero(&server_addr,sizeof(struct sockaddr_in));

server_addr.sin_family=AF_INET;

server_addr.sin_addr.s_addr=htonl(INADDR_ANY);

server_addr.sin_port=htons(portnumber);

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

{

fprintf(stderr,"bind error: %s\n\a",strerror(errno));

exit(1);

}

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

{

fprintf(stderr,"listen error: %s\n\a",strerror(errno));

exit(1);

}

while(1)

{

sin_size= sizeof(struct sockaddr_in);

if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)

{

fprintf(stderr,"accept error: %s\n\a",strerror(errno));

exit(1);

}

fprintf(stderr,"server get connection from %s\n\a",strerror(errno));

if((nbytes=read(new_fd,buffer,1024))==-1)

{

fprintf(stderr,"read error: %s\n\a",strerror(errno));

exit(1);

}

buffer[nbytes]='\0';

printf("fc said: %s\n",buffer);

close(new_fd);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: