#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/in.h>
#include <string.h>
int main(void)
{
//1.创建套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
perror("socket fail");
return -1;
}
//2.连接服务器
struct sockaddr_in saddr;
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family=AF_INET;
saddr.sin_port = htons(7889);
saddr.sin_addr.s_addr = inet_addr("192.168.1.240");
int ret = connect(sockfd, (struct sockaddr*)&saddr, sizeof(saddr));
if(ret < 0)
{
perror("connect fail");
return -1;
}
char buffer[1024]={0};
while(1)
{
scanf("%s", buffer);
write(sockfd, buffer, strlen(buffer));
int size = 0;
read(sockfd,&size, 4);
printf("size=%d\n", size);
}
close(sockfd);
return 0;
}
服务器
#include <stdio.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <linux/in.h>
#include <string.h>
int main(void)
{
//1.创建套接字
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
perror("socket fail");
return -1;
}
//2.绑定
struct sockaddr_in seraddr;
//初始化地址
memset(&seraddr, 0, sizeof(seraddr));
seraddr.sin_family=AF_INET;
seraddr.sin_port = htons(7889);
seraddr.sin_addr.s_addr = htonl(INADDR_ANY);
int ret = bind(sockfd, (struct sockaddr*)&seraddr, sizeof(seraddr));
if(ret < 0)
{
perror("bind fail");
close(sockfd);
return -1;
}
//3.监听
ret = listen(sockfd, 5);
if(ret < 0)
{
perror("listen fail");
return -1;
}
//4.接受连接
struct sockaddr_in clientaddr;
socklen_t len = sizeof(clientaddr);
while(1)
{
int clientfd = accept(sockfd, (struct sockaddr*)&clientaddr, &len);
if(clientfd < 0)
{
perror("连接失败:");
continue;
}
printf("有客户端链接:%s:%d\n", inet_ntoa(clientaddr.sin_addr), ntohs(clientaddr.sin_port));
//接收数据
char buffer[1024]={0};
int size = read(clientfd, buffer, sizeof(buffer));
printf("recv:%s\n", buffer);
//发生数据
write(clientfd, &size, 4);
close(clientfd);
}
close(sockfd);
return 0;
}