天天看點

Linux網絡程式設計之UDP協定(完整版)

server.c:

#include <sys/types.h>          /* see notes */

#include <sys/socket.h>

#include <string.h>

#include <netinet/in.h>

#include <arpa/inet.h>

#include <unistd.h>

#include <stdio.h>

#include <signal.h>

/* socket

 * bind

 * sendto/recvfrom

 */

#define server_port 8888

int main(int argc, char **argv)

{

int isocketserver;

int isocketclient;

struct sockaddr_in tsocketserveraddr;

struct sockaddr_in tsocketclientaddr;

int iret;

int iaddrlen;

int irecvlen;

unsigned char ucrecvbuf[1000];

int iclientnum = -1;

isocketserver = socket(af_inet, sock_dgram, 0);

if (-1 == isocketserver)

printf("socket error!\n");

return -1;

}

tsocketserveraddr.sin_family      = af_inet;

tsocketserveraddr.sin_port        = htons(server_port);  /* host to net, short */

  tsocketserveraddr.sin_addr.s_addr = inaddr_any;

memset(tsocketserveraddr.sin_zero, 0, 8);

iret = bind(isocketserver, (const struct sockaddr *)&tsocketserveraddr, sizeof(struct sockaddr));

if (-1 == iret)

printf("bind error!\n");

while (1)

iaddrlen = sizeof(struct sockaddr);

irecvlen = recvfrom(isocketserver, ucrecvbuf, 999, 0, (struct sockaddr *)&tsocketclientaddr&iaddrlen);

if (irecvlen > 0)

ucrecvbuf[irecvlen] = '\0';

printf("get msg from %s : %s\n", inet_ntoa(tsocketclientaddr.sin_addr), ucrecvbuf);

close(isocketserver);

return 0;

client.c

 * connect

 * send/recv

unsigned char ucsendbuf[1000];

int isendlen;

if (argc != 2)

printf("usage:\n");

printf("%s <server_ip>\n", argv[0]);

isocketclient = socket(af_inet, sock_dgram, 0);

  //tsocketserveraddr.sin_addr.s_addr = inaddr_any;

  if (0 == inet_aton(argv[1], &tsocketserveraddr.sin_addr))

  {

printf("invalid server_ip\n");

iret = connect(isocketclient, (const struct sockaddr *)&tsocketserveraddr, sizeof(struct sockaddr));

printf("connect error!\n");

if (fgets(ucsendbuf, 999, stdin))

isendlen = send(isocketclient, ucsendbuf, strlen(ucsendbuf), 0);

if (isendlen <= 0)

close(isocketclient);

繼續閱讀