socket_c客户端
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
int main(void)
{
int socket_fd = -1;
int temp_fd = -1;
char wbuff[100] = {0};
struct sockaddr_in server_addr; // 绑定本机的IP和端口
// 1.创建套接字 AF_INET 和 PF_INET 是一样的
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if(socket_fd < 0)
{
printf("socket create fail!\n");
return -1;
}
//2.设置(初始化)本机的IP和端口、协议
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET; /*协议地址*/
server_addr.sin_port = htons(9999); /*将端口号转换为网络字节序*/
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
socklen_t addrlen = sizeof(server_addr);
int ret = connect(socket_fd, (struct sockaddr *)&server_addr, addrlen);
if(ret < 0)
{
perror("connect\n");
return -2;
}
printf("连接上了服务器\n");
//
while(1)
{
// 收发消息
memset(wbuff, 0, sizeof(wbuff));
scanf("%s", wbuff);
send(socket_fd, wbuff, 100,0);
// send
//printf("rbuf = %s\n", wbuff);
}
return 0;
}
socket_s服务器
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
int main(void)
{
int listen_fd = -1;
int temp_fd = -1;
char rbuff[100] = {0};
struct sockaddr_in my_addr; // 绑定本机的IP和端口
struct sockaddr_in src_addr; // 存放客户端的IP地址
// 1.创建套接字 AF_INET 和 PF_INET 是一样的
listen_fd = socket(AF_INET, SOCK_STREAM, 0);
if(listen_fd < 0)
{
printf("socket create fail!\n");
return -1;
}
//2.设置(初始化)本机的IP和端口、协议
memset(&my_addr, 0, sizeof(my_addr));
my_addr.sin_family = AF_INET; /*协议地址*/
my_addr.sin_port = htons(9999); /*将端口号转换为网络字节序*/
my_addr.sin_addr.s_addr = inet_addr("0.0.0.0"); /* 绑定的本机IP,0.0.0.0代表本机所有IP htonl(INADDR_ANY) 代表本机所有IP*/
// 3.绑定本机端口和IP地址、协议
int status = bind (listen_fd, (struct sockaddr *) &my_addr, sizeof(my_addr));
// 判断绑定是否成功
if(status < 0)
{
perror("band");
return -2;
}
// 4. 设置监听 DDOS
listen(listen_fd, 5); // 同时可以接收5个连接请求
socklen_t addrlen = sizeof(src_addr);
//5.开始监听,等待客户端链接 阻塞函数
memset(&src_addr, 0, sizeof(src_addr));
temp_fd = accept(listen_fd, (struct sockaddr *)&src_addr, &addrlen);
if(temp_fd < 0)
{
}
/* 多个客户端连接时要分别将新的文件描述符存起来
temp_fd2 = accept(listen_fd, (struct sockaddr *)&src_addr, &addrlen);
if(temp_fd2 < 0)
{
}
*/
printf("有客户端链接\n");
//
while(1)
{
// 收发消息
memset(rbuff, 0, sizeof(rbuff));
recv(temp_fd, rbuff, 100, 0);
// recv
printf("rbuf = %s\n", rbuff);
}
return 0;
}