簡單的學習代碼,僅供參考:
server.c
#include?<stdlib.h>
#include?<stdio.h>
#include?<string.h>
#include?<netdb.h>
#include?<sys/socket.h>
#include?<arpa/inet.h>
#define?SERVICE_PORT 8080
#define?BUFSIZE?2048
#define?HEAD?4
int?main(int?argc,?char?**argv)
{
struct?sockaddr_in?myaddr; /*?our?address?*/
struct?sockaddr_in?remaddr; /*?remote?address?*/
socklen_t?addrlen?=?sizeof(remaddr); /*?length?of?addresses?*/
int?recvlen; /*?#?bytes?received?*/
int?fd; /*?our?socket?*/
int?msgcnt?=?0; /*?count?#?of?messages?we?received?*/
unsigned?char?buf[BUFSIZE]="ret_"; /*?receive?buffer?*/
/*?create?a?UDP?socket?*/
if?((fd?=?socket(AF_INET,?SOCK_DGRAM,?0))?<?0)?{
perror("cannot?create?socket\n");
return?0;
}
/*?bind?the?socket?to?any?valid?IP?address?and?a?specific?port?*/
memset((char?*)&myaddr,?0,?sizeof(myaddr));
myaddr.sin_family?=?AF_INET;
myaddr.sin_addr.s_addr?=?htonl(INADDR_ANY);
myaddr.sin_port?=?htons(SERVICE_PORT);
if?(bind(fd,?(struct?sockaddr?*)&myaddr,?sizeof(myaddr))?<?0)?{
perror("bind?failed");
return?0;
}
/*?now?loop,?receiving?data?and?printing?what?we?received?*/
for?(;;)?
{
printf("waiting?on?port?%d\n",?SERVICE_PORT);
recvlen?=?recvfrom(fd,?buf+HEAD,?BUFSIZE,?0,?(struct?sockaddr?*)&remaddr,?&addrlen);
if?(recvlen?>?0)?
{
buf[HEAD+recvlen]?=?0;
printf("received?message:?\"%s\"?(%d?bytes)\n",?buf+HEAD,?recvlen);
}
else
{
printf("uh?oh?-?something?went?wrong!\n");
}
printf("sending?response?\"%s\"\n",?buf);
if?(sendto(fd,?buf,?strlen(buf),?0,?(struct?sockaddr?*)&remaddr,?addrlen)?<?0)
{
perror("sendto");
}
}
close(fd);
return?0;
}
client.c
#include?<stdlib.h>#include?<stdio.h>
#include?<string.h>
#include?<netdb.h>
#include?<sys/socket.h>
#define?SERVICE_PORT 8080
#define?BUFLEN?2048
int?main(?int?argc,char*?argv[]?)
{
struct?sockaddr_in?myaddr,?remaddr;
int?fd,?i,?slen=sizeof(remaddr);
char?sendbuf[BUFLEN]="hello"; /*?message?buffer?*/
char?readbuf[BUFLEN]={0};
int?recvlen; /*?#?bytes?in?acknowledgement?message?*/
char?*server?=?"127.0.0.1"; /*?change?this?to?use?a?different?server?*/
/*?create?a?socket?*/
if?((fd=socket(AF_INET,?SOCK_DGRAM,?0))==-1)
{
printf("socket?created\n");
}
/*?bind?it?to?all?local?addresses?and?pick?any?port?number?*/
memset((char?*)&myaddr,?0,?sizeof(myaddr));
myaddr.sin_family?=?AF_INET;
myaddr.sin_addr.s_addr?=?htonl(INADDR_ANY);
myaddr.sin_port?=?htons(0);
if?(bind(fd,?(struct?sockaddr?*)&myaddr,?sizeof(myaddr))?<?0)?
{
perror("bind?failed");
return?0;
}
memset((char?*)?&remaddr,?0,?sizeof(remaddr));
remaddr.sin_family?=?AF_INET;
remaddr.sin_port?=?htons(SERVICE_PORT);
if?(inet_aton(server,?&remaddr.sin_addr)==0)?
{
fprintf(stderr,?"inet_aton()?failed\n");
exit(1);
}
printf("Sending?packet?%d?to?%s?port?%d\n",?i,?server,?SERVICE_PORT);
if?(sendto(fd,?sendbuf,?strlen(sendbuf),?0,?(struct?sockaddr?*)&remaddr,?slen)==-1)
{
perror("sendto");
exit(1);
}
/*?now?receive?an?acknowledgement?from?the?server?*/
recvlen?=?recvfrom(fd,?readbuf,?BUFLEN,?0,?(struct?sockaddr?*)&remaddr,?&slen);
if?(?recvlen?>=?0?)?
{
readbuf[recvlen]?=?0; /*?expect?a?printable?string?-?terminate?it?*/
printf("received?message:?\"%s\"\n",?readbuf);
}
close(fd);
return?0;
}
如果需要整個工程,可以聯系我。