服务器
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define SERPORT 9003
#define SERADDR "192.168.74.128" // ifconfig看到的
#define BACKLOG 100
int main()
{
int sockfd=-1;
int ret=-1;
int clifd=-1;
socklen_t len=0;
struct sockaddr_in seraddr = {0};
struct sockaddr_in cliaddr = {0};
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
perror("socket");
return -1;
}
printf("socket ok\r\n");
seraddr.sin_family = AF_INET; // 设置地址族为IPv4
seraddr.sin_port = htons(SERPORT); // 设置地址的端口号信息
seraddr.sin_addr.s_addr = inet_addr(SERADDR); // 设置IP地址
ret=bind(sockfd,(const struct sockaddr *)&seraddr,sizeof(seraddr));
if(ret<0)
{
perror("bind");
return -1;
}
printf("bind ok\r\n");
ret=listen(sockfd,BACKLOG);
if(ret<0)
{
perror("listen");
return-1;
}
printf("listen ok\r\n");
clifd = accept(sockfd, (struct sockaddr *)&cliaddr, &len);
if(clifd<0)
{
perror("accrpt");
return -1;
}
printf("连接已经建立,client fd = %d.\n",clifd);
while(1)
{
char recvbuf[100]={0};
ssize_t rsize=recv(clifd,recvbuf,sizeof(recvbuf),0);
if(rsize<0)
{
perror("recv");
return -1;
}
printf("成功接收了%d个字节\n", rsize);
printf("client发送过来的内容是:%s\n", recvbuf);
printf("--------------------------\r\n");
char sendbuf[100];
printf("输入要发送的数据:");
scanf("%s",sendbuf);
ssize_t ssize=send(clifd,sendbuf,strlen(sendbuf),0);
if(ssize<0)
{
perror("send");
return -1;
}
}
return 0;
}
客户端
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#define SERADDR "192.168.74.128" // 服务器开放给我们的IP地址和端口号
#define SERPORT 9003
int main()
{
int sockfd=-1;
int ret=-1;
struct sockaddr_in seraddr = {0};
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
perror("socket");
return -1;
}
printf("socket ok\r\n");
seraddr.sin_family = AF_INET; // 设置地址族为IPv4
seraddr.sin_port = htons(SERPORT); // 设置地址的端口号信息
seraddr.sin_addr.s_addr = inet_addr(SERADDR); // 设置IP地址
ret=connect(sockfd,(const struct sockaddr *)&seraddr,sizeof(seraddr));
if(ret<0)
{
perror("connect");
return -14;
}
printf("connect ok\r\n");
while(1)
{
char sendbuf[100];
printf("输入要发送的数据:");
scanf("%s",sendbuf);
ssize_t ssize=send(sockfd,sendbuf,strlen(sendbuf),0);
if(ssize<0)
{
perror("send");
return -1;
}
printf("-------------------------\r\n");
char recvbuf[100]={0};
ssize_t rsize=recv(sockfd,recvbuf,sizeof(recvbuf),0);
if(rsize<0)
{
perror("recv");
return -1;
}
printf("成功接收了%d个字节\n", rsize);
printf("client发送过来的内容是:%s\n", recvbuf);
}
return 0;
}
地址转换
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define IP "192.168.1.120"
/*
//老接口
int main()
{
in_addr_t ip_u32=inet_addr(IP);
printf("%d\r\n",ip_u32);
struct in_addr addr;
if (inet_aton(IP, &addr) == 0)
{
printf( "Invalid address\n");
return -1;
}
printf("%d\r\n", addr.s_addr);
printf("%s\r\n", inet_ntoa(addr));
}
return 0;
}
*/
/*新接口*/
int main()
{
int ret;
struct in_addr addr = {0};
ret = inet_pton(AF_INET, IP, &addr);
if (ret <= 0)
{
if (ret == 0)
printf("Not in presentation format");
else
perror("inet_pton");
return -1;
}
printf("%x\r\n",addr);
const char *p;
char buf[20];
p=inet_ntop(AF_INET,&addr,buf,sizeof(buf));
if(p==NULL)
{
perror("inet_ntop");
return -1;
}
printf("%s\r\n",buf);
return 0;
}