📄 tcpserver.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 + -