service.c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<arpa/inet.h>
#include<unistd.h>
#define PORT 5678
int main()
{
int sock;
struct sockaddr_in server;
struct sockaddr_in client;
size_t len;
char buf[100];
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=htons(INADDR_ANY);
//create socket;
sock = socket(AF_INET,SOCK_DGRAM,0);
if(sock < 0)
{
perror("socket");
return -1;
}
//bind
if(bind(sock,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("bind");
close(sock);
return -1;
}
while(1)
{
memset(buf,0,sizeof(buf));
len = sizeof(client);
if(recvfrom(sock,buf,99,0,(struct sockaddr *)&client,&len) < 0)
{
perror("recvfrom");
break;
}
printf("message:%s,client IP:%s,client PORT:%d\n",buf,inet_ntoa(client.sin_addr),htons(client.sin_port));
sendto(sock,"FIrst connect",16,0,(struct sockaddr *)&client,sizeof(client));
if(strcmp(buf,"bye") == 0)
break;
}
close(sock);
return 0;
}
client.c(注释部分为:非connect用于UDP)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<unistd.h>
#define PORT 5678
int main()
{
int sock;
struct sockaddr_in server;
struct sockaddr_in client;
char buf[100];
sock = socket(AF_INET,SOCK_DGRAM,0);
if(sock < 0)
{
perror("socket");
return -1;
}
//send
bzero(&server,sizeof(server));
server.sin_family=AF_INET;
server.sin_port=htons(PORT);
server.sin_addr.s_addr=inet_addr("127.0.0.1");
/*sendto(sock,"client connet",20,0,(struct sockaddr *)&server,sizeof(server));
size_t len;
len = sizeof(client);
while(1)
{
if(recvfrom(sock,buf,99,0,(struct sockaddr *)&client,&len) < 0)
{
perror("recvfrom");
close(sock);
return -1;
}
if(len != sizeof(server) )
{
printf("server IP :%s,message :%s\n",inet_ntoa(client.sin_addr),buf);
close(sock);
return 0;
}
printf("message = %s\n",buf);
}*/
//int connfd;
//connect(sock,(struct sockaddr *)&server,sizeof(server));
if(connect(sock,(struct sockaddr *)&server,sizeof(server)) < 0)
{
perror("sock");
close(sock);
return -1;
}
if(send(sock,"12345345",10,0) < 0)
{
perror("send");
// close(connfd);
close(sock);
}
if(recv(sock,buf,99,0) < 0)
{
perror("recv");
// close(connfd);
close(sock);
}
printf("message = %s\n",buf);
//close(connfd);
close(sock);
return 0;
}