66 lines
1.7 KiB
C
66 lines
1.7 KiB
C
|
#include<stdio.h>
|
|||
|
#include <sys/types.h> /* See NOTES */
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <sys/socket.h>
|
|||
|
#include <arpa/inet.h>
|
|||
|
#include <unistd.h>
|
|||
|
#include<stdlib.h>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#define SERVER_ADDR "172.29.147.16" //服务器的IP地址
|
|||
|
#define SERVER_PORT 20000 //port 服务器的端口号
|
|||
|
|
|||
|
|
|||
|
int main()
|
|||
|
{
|
|||
|
int ret;
|
|||
|
//1、买手机(建立套接字)
|
|||
|
int socketFd = socket(AF_INET, SOCK_STREAM, 0);
|
|||
|
if(socketFd == -1){
|
|||
|
perror("socket error");
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
//2、绑定自己的电话号码(绑定自己的IP地址和端口号)
|
|||
|
//定义一个IPV4结构体变量,存储IP地址和端口号
|
|||
|
struct sockaddr_in serverAddr;
|
|||
|
serverAddr.sin_family = AF_INET ;//IPv4
|
|||
|
serverAddr.sin_port = htons(SERVER_PORT);//16端口号 --本地端口号--网络端口号
|
|||
|
serverAddr.sin_addr.s_addr = inet_addr(SERVER_ADDR); //32IP地址 --本地IP--网络IP
|
|||
|
|
|||
|
ret = bind(socketFd, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr_in));
|
|||
|
if(ret == -1){
|
|||
|
perror("bind error");
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
//3、设置铃声(设置监听)
|
|||
|
ret = listen(socketFd, 20); //20表示同时连接上来的客户端的最大数量
|
|||
|
if(ret == -1){
|
|||
|
perror("listen error");
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
printf("阻塞等待新的客户端连接......\n");
|
|||
|
//4、坐等电话(阻塞等待客户端的连接)
|
|||
|
int newClientFd = accept(socketFd, NULL,NULL);
|
|||
|
if(ret == -1){
|
|||
|
perror("accept error");
|
|||
|
exit(0);
|
|||
|
}
|
|||
|
//注意 accept函数的返回值 表示 新的客户端的文件描述符 ,后面与客户端通信 必须使用该文件描述符
|
|||
|
printf("有新的客户端连接上来....\n");
|
|||
|
|
|||
|
//5、聊天 接收 数据
|
|||
|
while(1)
|
|||
|
{
|
|||
|
char buf[1024]={0};
|
|||
|
read(newClientFd,buf,sizeof(buf));
|
|||
|
printf("buf:%s\n",buf);
|
|||
|
}
|
|||
|
|
|||
|
//6、关闭 断开连接
|
|||
|
close(socketFd);
|
|||
|
close(newClientFd);
|
|||
|
|
|||
|
return 0;
|
|||
|
}
|