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