流程:
1.使用socket()创建套接字sfd
2.使用bind()为套接字sfd绑定端口号和IP地址,绑定前应定义一个sockaddr_in结构体,用端口号和IP对其进行初始化
3.使用listen()设置最大同时建立连接上限
4.使用accept()阻塞等待客户端连接请求,返回一个套接字cfd
5.使用IO函数从套接字cfd缓冲区读出数据进行处理,处理完后写入套接字cfd中
6.关闭套接字,程序结束
#include "stdio.h"
#include "unistd.h"
#include "sys/socket.h"
#include "arpa/inet.h"
#include "errno.h"
#include "string.h"
#include "ctype.h"
#include "iostream"
#define PORT 7777 //服务器端口号
#define IP "192.168.1.10" //服务器ip地址
using namespace std;
int main()
{
int sfd;
int cfd;
struct sockaddr_in serv_addr;
struct sockaddr_in clie_addr;
char buf[1024];
socklen_t clie_addr_len;
bzero(&clie_addr,sizeof(clie_addr));
sfd=socket(AF_INET,SOCK_STREAM,0); //创建服务器套接字
if(sfd<0)
{
perror("socket error");
exit(1);
}
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(PORT);
serv_addr.sin_addr.s_addr=inet_addr(IP);
int bret=bind(sfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr)); //绑定端口和IP
if(bret<0)
{
perror("bind error");
exit(1);
}
int lret=listen(sfd,5); //设置同时最大建立连接上限
if(lret<0)
{
perror("listen error");
exit(1);
}
cfd=accept(sfd,(struct sockaddr*)&clie_addr,&clie_addr_len); //等待客户端请求
if(cfd<0)
{
perror("accept error");
exit(1);
}
while(1) //处理任务
{
int n=0;
n=read(cfd,buf,1024); //从 缓冲区读出
for(int i=0;i<n;i++)
{
buf[i]=toupper(buf[i]);
}
write(cfd,buf,n); //将结果写入缓冲区
if(n<0)
{
perror("read error");
exit(1);
}
}
close(cfd);
close(sfd);
return 0;
}