⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.c

📁 linux下使用socket进行网络通信
💻 C
字号:
/* server.c */
#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 6

int main()
{
   struct sockaddr_in local_sockaddr,remote_sockaddr;
   int sin_size,recvbytes;
   int local_sockfd,remote_sockfd;
   char buf[MAXDATASIZE];
   if((local_sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) //建立socket连接 建立socket连接后可对sockaddr sockaddr_in初始化以保存所建立的socket信息
   {
      perror("local socket");
      exit(1);	
   }	
   printf("local socket success!local sockfd=%d\n",local_sockfd);
   
   local_sockaddr.sin_family=AF_INET;              //地址簇 IPv4协议
   local_sockaddr.sin_port=htons(SERVPORT);        //端口号 htons转成网络字节顺序
   local_sockaddr.sin_addr.s_addr=INADDR_ANY;      //IP地址  INADDR_ANY自动获取IP
   bzero(&(local_sockaddr.sin_zero),8);            //填0 以保持和struct sockaddr同样大小
   
   if(bind(local_sockfd,(struct sockaddr*)&local_sockaddr,sizeof(struct sockaddr))==-1) //bind用于将本地IP地址绑定端口号
   {
      perror("local bind");
      exit(1);	
   }
   printf("local bind success!");
   
   if(listen(local_sockfd,BACKLOG)==-1)            //等待连接函数 BACKLOG是请求队列允许的最大请求数
   {
      perror("local listen");
      exit(1);	
   }
   printf("listening ....\n");
   
   if((remote_sockfd=accept(local_sockfd,(struct sockaddr*)&remote_sockaddr,&sin_size))==-1)
   {
      perror("accept");
      exit(1);	
   }

   if((recvbytes=recv(remote_sockfd,buf,MAXDATASIZE,0))==-1)
   {
      perror("receive");
      exit(1);
   }

   printf("received a connection from:%s\n",inet_ntoa(remote_sockaddr.sin_addr));
   printf("received content:%s\n",buf);
   
   close(local_sockfd);
   return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -