1、服务端
#include "includes.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/in.h>
#define SERVER_PORT 8888 //监听的端口号
#define MAX_BUFFER_LEN (256) //最大的buffer长度
void process_conn_server(int sock)
{
char buf[MAX_BUFFER_LEN] = {0};
int iRet = 0;
printf("%s Enter\n", __func__);
iRet = read(sock, buf, sizeof(buf));
if (0 > iRet)
{
printf("read buf error\n");
return ;
}
printf("read buf from client.\r\n");
//读取到的信息写到标准输出
write(1, buf, sizeof(buf));
printf("%s Exit\n", __func__);
return ;
}
int startServer()
{
int iRet = ERROR;
int sock_server = 0;
int sock_client = 0;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
pid_t pid = 0;
//1、创建一个socket
sock_server = socket(AF_INET, SOCK_STREAM, 0);
if (0 > sock_server)
{
printf("create socket error!\n");
return ERROR;
}
//2、设置服务器的地址
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = SERVER_PORT;
//3、绑定地址到套接字描述符
iRet = bind(sock_server, (const struct sockaddr *)&server_addr, sizeof(struct sockaddr));
if( 0 > iRet)
{
printf("bind sock_server error\n");
return iRet;
}
//4、设置监听队列
iRet = listen(sock_server, 5);
if(0 > iRet)
{
printf("sock_server listen error\n");
return iRet;
}
//5、主循环处理客户端请求
while(1)
{
sock_client = accept(sock_server, (struct sockaddr *)&(client_addr), sizeof(client_addr) );
if (0 > sock_client)
{
continue; //继续监听客户端
}
// 6、创建一个新的进程处理client数据
printf("recive the client DATA.\n");
pid = fork();
if (0 > pid)
{
printf("create process error\n");
close(sock_client);
continue;
}
else if(0 == pid)//子进程
{
close(sock_server);
//处理
process_conn_server(sock_client);
}
else // 父进程
{
close(sock_client);
}
}
return iRet;
}
int main(int argc, char const *argv[])
{
/* code */
printf("come in server\n");
startServer();
return 0;
}
2、客户端
#include "includes.h"
#include <sys/types.h>
#include <sys/socket.h>
#include <linux/in.h>
#define SERVER_PORT 8888 //监听的端口号
#define MAX_BUFFER_LEN (256)
void process_conn_client(int sock)
{
int size = 0;
char buffer[MAX_BUFFER_LEN] = {0};
while(1)
{
//从标准输入读取用户输入的数据
size = read(0, buffer, sizeof(buffer));
if (0 < size)
{
//将读到的信息发送到服务器
printf("client read from output buffer:%s\n", buffer);
write(sock, buffer, sizeof(buffer));
}
}
}
void startClient()
{
int iRet = ERROR;
int sock_server = 0;
int sock_client = 0;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
printf("%s Enter\n", __func__);
//1、创建一个socket
sock_client = socket(AF_INET, SOCK_STREAM, 0);
if(0 > sock_client)
{
printf("create client socket error\n");
return;
}
//2、设置客户端地址
bzero(&server_addr, sizeof(struct sockaddr_in));
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
server_addr.sin_port = SERVER_PORT;
inet_pton(AF_INET, "127.0.0.1", &server_addr.sin_addr);
//3、连接服务器
connect(sock_client, (const struct sockaddr *)&server_addr, sizeof(struct sockaddr));
//4、客户端与服务器进行通信
process_conn_client(sock_client);
//5、关闭连接
close(sock_client);
printf("%s Exit\n", __func__);
return;
}
int main(int argc, char const *argv[])
{
/* code */
printf("come in client\n");
startClient();
return 0;
}