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

📄 tcpserver.c

📁 Linux网络通信实例TCP&UDP 包括UDP和TCP简单的客户端和服务端两个程序 Linux下面轻松编译通过
💻 C
字号:
//====================================TCPServer.c=====================================
#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>

int main()
{
     int sockfd, new_fd;
     int sin_size, numbytes;
     struct sockaddr_in addr, cliaddr;
     socklen_t addr_len;
     /*******************************************************************
     * 建立一個tpcip server 連線, 並取得裝置描述 m_nSockfd
     *******************************************************************/ 
     if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
     {
           perror("createSocket");
           return -1;
     }
     /*******************************************************************
     * 初始化 sockadd_in 結構
     *******************************************************************/                  
     memset(&addr, 0, sizeof(addr));
     addr.sin_family = AF_INET;
     addr.sin_port = htons(15800);
     addr.sin_addr.s_addr = htonl(INADDR_ANY);
     //绑定套接口
     if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr))==-1)
     {
           perror("bind");
           return -1;
     }
     //创建监听套接口
     if(listen(sockfd,10)==-1)
     {
           perror("listen");
           return -1;
     }
     char buff[1024];
     //等待连接
     while(1) {
           sin_size = sizeof(struct sockaddr_in);
           perror("server is run");
           //如果建立连接,将产生一个全新的套接字      
           if((new_fd = accept(sockfd,(struct sockaddr *)&cliaddr,&sin_size))==-1)
           {
                 perror("accept");
                 return -1;
           }
           //生成一个子进程来完成和客户端的会话,父进程继续监听
           if(!fork()) 
           {
                 //读取客户端发来的信息
                 while(1)
                 {
                 memset(buff,0,sizeof(buff));
                 if((numbytes = recv(new_fd,buff,sizeof(buff),0))==-1)
                 {
                       perror("recv");
                       return -1;
                 }
                 printf("buff=%s\n",buff);
                 //将从客户端接收到的信息再发回客户端
                 if(send(new_fd,buff,strlen(buff),0)==-1)
                       perror("send");
                 }
                 close(new_fd);
                 return 0;
           }
           close(new_fd);
     }
     close(sockfd);
}

⌨️ 快捷键说明

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