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()------> 读写交互
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); } }
相关文章推荐
- C Socket Programming for Linux with a Server and Client Example Code
- C Socket Programming for Linux with a Server and Client Example Code
- Delphi 实现传送文件 <TServerSocket/TClientSocket>
- 3个学习Socket编程的简单例子:TCP Server/Client, Select
- 3个学习Socket编程的简单例子:TCP Server/Client, Select
- 线程<一>---那些年我们一起学习linux程序设计 .
- —> 开始学习linux
- linux 源码学习计划<转载>
- SQL Server XML基础学习之<5>--XQuery(query)
- Linux下的socket协议UDP Client/Server程序
- linux下socket通信,server和client简单例子
- 网络编程<一>---那些年我们一起学习linux程序设计 .
- linux初学者学习大全&lt;转&gt;
- Windows Server appfabric exception ErrorCode<ERRCA0016>:SubStatus<ES0001>
- 让你的UNIX/LINUX又多条好使的命令 --> ccnt (code count)
- linux c socket server client 实例
- linux 学习心得笔记<primary> 第四篇
- linux 学习心得笔记<初级>第二篇
- linux 学习心得笔记<初级>第三篇
- Socket server & Client