- 1.服务器端
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <errno.h>
- #include <string.h>
- #include <unistd.h>
- #include <netinet/in.h>
- #define SERVPORT 3333
- #define BACKLOG 10
- #define MAX_CONNECTED_NO 10
- #define MAXDATASIZE 5
- int main()
- {
- struct sockaddr_in server_sockaddr,client_sockaddr;
- int sin_size,recvbytes;
- int sockfd,client_fd;
- char buf[MAXDATASIZE];
- /*创建socket*/
- if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){
- perror("socket");
- exit(1);
- }
- printf("socket success!,sockfd=%d\n",sockfd);
- /*设置服务器sockaddr_in结构*/
- server_sockaddr.sin_family=AF_INET;
- server_sockaddr.sin_port=htons(SERVPORT);
- server_sockaddr.sin_addr.s_addr=INADDR_ANY;
- bzero(&(server_sockaddr.sin_zero),8);
- /*绑定socket和端口*/
- if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){
- perror("bind");
- exit(1);
- }
- printf("bind success!\n");
- /*监听客户端请求*/
- if(listen(sockfd,BACKLOG)==-1){
- perror("listen");
- exit(1);
- }
- printf("listening....\n");
- /*接受客户端请求*/
- if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){
- perror("accept");
- exit(1);
- }
- /*接收客户端信息*/
- if((recvbytes=recv(client_fd,buf,MAXDATASIZE,0))==-1){
- perror("recv");
- exit(1);
- }
- printf("received a connection :%s\n",buf);
- /*关闭socket*/
- close(sockfd);
- }
- 2.客户端
- #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 argc,char *argv[]){
- int sockfd,sendbytes;
- char buf[MAXDATASIZE];
- struct hostent *host;
- struct sockaddr_in serv_addr;
- /*argc<2,表示没有输入主机名,主机句是IP地址形式,如“192.168.1.1”*/
- if(argc < 2){
- fprintf(stderr,"Please enter the server's hostname!\n");
- exit(1);
- }
- /*获取主机名,地址解析函数*/
- if((host=gethostbyname(argv[1]))==NULL){
- perror("gethostbyname");
- exit(1);
- }
- /*创建socket*/
- if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){
- perror("socket");
- exit(1);
- }
- /*设置serv_addr结构参数*/
- 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);
- /*向服务器请求连接,serv_addr是服务器端地址*/
- if(connect(sockfd,(struct sockaddr *)&serv_addr,\
- sizeof(struct sockaddr))==-1){
- perror("connect");
- exit(1);
- }
- /*发送消息给服务器,此时可以在服务器端看到"hello"字样*/
- if((sendbytes=send(sockfd,"hello",5,0))==-1){
- perror("send");
- exit(1);
- }
- /*关闭连接*/
- close(sockfd);
- }
二、编译步骤
- #gcc server.c -o server
- #./server //此时服务器端在监听
- #gcc client.c -o client
- #./client 172.31.100.236 //客户端向服务器端发送“hello",服务器端监听终止