主要涉及到的函数有:
#include <sys/types.h>
#include <sys/socket.h>
int socket(int domain
, int type
, int protocol
);
int bind(int sockfd
, const struct sockaddr
*addr
, socklen_t addrlen
);
ssize_t
recvfrom(int sockfd
, void *buf
, size_t len
, int flags
,
struct sockaddr
*src_addr
, socklen_t
*addrlen
);
ssize_t
sendto(int sockfd
, const void *buf
, size_t len
, int flags
,
const struct sockaddr
*dest_addr
, socklen_t addrlen
);
客户端的实现:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
int sockfd
= socket( AF_INET
, SOCK_DGRAM
, 0 );
if ( -1 == sockfd
)
{
perror( "sock created" );
exit( -1 );
}
struct sockaddr_in server
;
memset(&server
, 0, sizeof( struct sockaddr_in
));
server
.sin_family
= AF_INET
;
server
.sin_port
= htons(6666);
server
.sin_addr
.s_addr
= inet_addr( "127.0.0.1" );
#define MAXSIZE 255
char achBuf
[MAXSIZE
] = {0};
unsigned int socklen
= sizeof(server
);
while (gets(achBuf
))
{
int nlen
= sizeof(server
);
sendto(sockfd
, achBuf
, strlen(achBuf
), 0, (const sockaddr
*)(&server
), nlen
);
recvfrom(sockfd
, achBuf
, MAXSIZE
, 0, (sockaddr
*)&server
, &socklen
);
printf("%s\n", achBuf
);
}
close(sockfd
);
}
服务端的实现:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <string.h>
#include <arpa/inet.h>
#include <unistd.h>
int main()
{
int sockfd
= socket( AF_INET
, SOCK_DGRAM
, 0 );
if ( -1 == sockfd
)
{
perror( "sock created" );
exit( -1 );
}
struct sockaddr_in server
, client
;
memset(&server
, 0, sizeof( struct sockaddr_in
));
server
.sin_family
= AF_INET
;
server
.sin_port
= htons(6666);
server
.sin_addr
.s_addr
= htonl(INADDR_ANY
);
int bindres
= bind(sockfd
, (struct sockaddr
*)&server
, sizeof(server
));
if ( -1 == bindres
)
{
perror( "sock created" );
exit( -1 );
}
#define MAXSIZE 255
char achBuf
[MAXSIZE
] = {0};
unsigned int sockLen
= sizeof(client
);
while (true)
{
memset(achBuf
, 0, sizeof(achBuf
));
int nLen
= recvfrom(sockfd
, achBuf
, MAXSIZE
, 0, (sockaddr
*)&client
, &sockLen
);
sendto(sockfd
, achBuf
, nLen
, 0, (const sockaddr
*)(&client
), sockLen
);
}
close(sockfd
);
}
转载请注明原文地址: https://mac.8miu.com/read-487318.html