您的位置:首页 > 其它

利用sockets实现服务器客户端简单通信

2017-03-27 20:38 639 查看
这一篇通篇代码实现的是一对一的你一句我一句的通信,客户端和服务器可以是两台不同的主机。

//utili.h
//头文件中可以更改端口号,主机名
#include<stdio.h>
#include<unistd.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<string.h>
#include<stdlib.h>
#include<arpa/inet.h>

#define PORT 9090
#define IP_ADDRESS "127.0.0.1"
#define LISTEN_QUEUE_SIZE 5


//ser.c
#include"utili.h"

int main(int argc, char const* argv[])
{
//socket()
int sockSer = socket(AF_INET, SOCK_STREAM, 0);
if(sockSer == -1)
{
perror("socket Ser");
exit(EXIT_FAILURE);
}
struct sockaddr_in addrSer, addrCli;
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(PORT);
addrSer.sin_addr.s_addr = inet_addr(IP_ADDRESS);

//bind()
socklen_t len = sizeof(struct sockaddr);
int res = bind(sockSer, (struct sockaddr*)&addrSer, len);
if(res == -1)
{
perror("bind");
close(sockSer);
exit(EXIT_FAILURE);
}

//listen()
res = listen(sockSer, LISTEN_QUEUE_SIZE);
if(res == -1)
{
perror("Ser listen");
exit(EXIT_FAILURE);
}

//accept()
int sockConn = accept(sockSer, (struct sockaddr*)&addrCli, &len);
if(sockConn == -1)
{
printf("Server Accept Client Connect fail...\n");
close(sockSer);
exit(EXIT_FAILURE);
}
else
{
printf("Server Accept Client Connect Ok...\n");
}

//send(),recv()
char sendbuf[256];
char recvbuf[256];
while(1)
{
printf("Ser:>");
scanf("%s", sendbuf);
if(strcmp(sendbuf, "quit") == 0)
break;
send(sockConn, sendbuf, strlen(sendbuf)+1, 0);
recv(sockConn, recvbuf, 256, 0);
printf("Cli:>%s\n", recvbuf);
}
//close()
close(sockSer);
return 0;
}


//cli.c
#include"utili.h"

int main(int argc, char const* argv[])
{
//socket()
int sockCli = socket(AF_INET, SOCK_STREAM, 0);
if(sockCli == -1)
{
perror("socket Cli");
exit(EXIT_FAILURE);
}
struct sockaddr_in addrSer;
addrSer.sin_family = AF_INET;
addrSer.sin_port = htons(PORT);
addrSer.sin_addr.s_addr = inet_addr(IP_ADDRESS);
socklen_t len = sizeof(struct sockaddr);
//connect()
int sockConn = connect(sockCli, (struct sockaddr*)&addrSer, len);
if(sockConn == -1)
{
printf("Cli connect Ser fail...\n");
close(sockCli);
exit(EXIT_FAILURE);
}
else
{
printf("Cli connect Ser ok...\n");
}

//send(),recv()
char sendbuf[256];
char recvbuf[256];
while(1)
{
recv(sockCli, recvbuf, 256, 0);
printf("Ser:>%s\n", recvbuf);
printf("Cli:>");
scanf("%s", sendbuf);
if(strcmp(sendbuf, "quit") == 0)
break;
send(sockCli, sendbuf, strlen(sendbuf)+1, 0);
}
//close()
close(sockCli);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sockets 通信