原理图:
服务器代码:
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main()
{
//创建套接字
int sock_fd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == sock_fd)
{
perror("creat socket failed");
return -1;
}
//绑定IP地址+端口号,结构体
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;//地址族
seraddr.sin_port = htons(8848);//host 主机序->网络序
seraddr.sin_addr.s_addr = inet_addr("192.168.3.35");//点分式IP地址需要转换成无符号的32位网络地址
socklen_t addrlen = sizeof(seraddr);
int ret = bind(sock_fd, (struct sockaddr *)&seraddr, addrlen);
if(-1 == ret)
{
perror("ser bind failed");
return -1;
}
//设置监听
listen(sock_fd, 4);
printf("等待连接....\n");
//等待客户端发起连接
int con_fd = accept(sock_fd, NULL, NULL);//阻塞
if(-1 == con_fd)
{
perror("accept failed\n");
return -1;
}
printf("连接成功!!!!\n");
char buf[128];//buf[0]
while(1)
{
memset(buf,0,128);
recv(con_fd, buf, 128, 0);
printf("[from tiandog]%s\n",buf);
if(strcmp(buf,"quit\n") == 0)
{
break;
}
}
close(sock_fd);
close(con_fd);
}
客户端代码:
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main()
{
//创建套接字
int sock_fd = socket(AF_INET,SOCK_STREAM,0);
if(-1 == sock_fd)
{
perror("creat socket failed");
return -1;
}
//绑定IP地址+端口号,结构体
struct sockaddr_in seraddr;
seraddr.sin_family = AF_INET;//地址族
seraddr.sin_port = htons(8848);//host 主机序->网络序
seraddr.sin_addr.s_addr = inet_addr("192.168.3.35");//点分式IP地址需要转换成无符号的32位网络地址
socklen_t addrlen = sizeof(seraddr);
int ret = bind(sock_fd, (struct sockaddr *)&seraddr, addrlen);
//发起连接
int con_ret = connect(sock_fd, (struct sockaddr *)&seraddr,addrlen);
if(-1 == con_ret)
{
perror("connect failed");
return -1;
}
char buf[128];//buf[0]
while(1)
{
memset(buf,0,128);
fgets(buf,sizeof(buf),stdin);
send(sock_fd, buf, strlen(buf), 0);//发送消息
if(strcmp(buf,"quit\n") == 0)
{
break;
}
}
close(sock_fd);
//close(con_fd);
}