TCP/UDPソケットプログラミング(その1)
戻る
::::::::::::::
Makefile
::::::::::::::
# $Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
CC=gcc
LFLAG=
#LFLAG=-lsocket -lnsl
CFLAG=
all: udpclient udpserver inetclient inetserver
udpclient: udpclient.o
$(CC) -o $@ udpclient.o $(LFLAG)
udpclient.o: udpclient.c udp-common.h
$(CC) -c udpclient.c
udpserver: udpserver.o
$(CC) -o $@ udpserver.o $(LFLAG)
udpserver.o: udpserver.c udp-common.h
$(CC) -c udpserver.c
inetclient: inetclient.o
$(CC) -o $@ inetclient.o $(LFLAG)
inetclient.o: inetclient.c inet-common.h
$(CC) -c inetclient.c
inetserver: inetserver.o
$(CC) -o $@ inetserver.o $(LFLAG)
inetserver.o: inetserver.c inet-common.h
$(CC) -c inetserver.c
clean:
rm -f udpclient udpserver inetclient inetserver *.o *~ *.bak
::::::::::::::
inet-common.h
::::::::::::::
/*
* $Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
*/
#define PORT 18782
::::::::::::::
inetclient.c
::::::::::::::
/*
* $Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include "inet-common.h"
main (int argc, char *argv[])
{
struct sockaddr_in addr;
struct hostent *hp;
int sock;
int len;
char buf[1024];
int ret;
if (argc != 2) {
printf ("Usage: %s SERVER_NAME\n", argv[0]);
exit (1);
}
if ((sock = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
perror ("socket");
exit (1);
}
bzero ((char *) &addr, sizeof (addr));
if ((hp = gethostbyname (argv[1])) == NULL) {
perror ("No such host");
exit (1);
}
bcopy (hp->h_addr, &addr.sin_addr, hp->h_length);
addr.sin_family = AF_INET;
addr.sin_port = htons (PORT);
if (connect (sock, (struct sockaddr *) &addr, sizeof (addr)) < 0) {
perror ("connect");
exit (1);
}
while (fgets (buf, 1024, stdin)) {
write (sock, buf, 1024);
ret = read (sock, buf, 1024);
buf[ret] = '\0';
printf ("%s", buf);
}
close (sock);
exit (0);
}
::::::::::::::
inetserver.c
::::::::::::::
/*
$Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "inet-common.h"
main ()
{
int i;
int fd_one, fd_two;
struct sockaddr_in saddr;
struct sockaddr_in caddr;
int len;
int ret;
char buf[1024];
if ((fd_one = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
perror ("socket");
exit (1);
}
bzero ((char *) &saddr, sizeof (saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons (PORT);
if (bind (fd_one, (struct sockaddr *) &saddr, sizeof (saddr)) < 0) {
perror ("bind");
exit (1);
}
if (listen (fd_one, 1) < 0) {
perror ("listen");
exit (1);
}
len = sizeof (caddr);
if ((fd_two = accept (fd_one, (struct sockaddr *) &caddr, &len)) < 0) {
perror ("accept");
exit (1);
}
close (fd_one);
ret = read (fd_two, buf, 1024);
while (strcmp (buf, "quit\n") != 0) {
for (i = 0; i < ret; i++) {
if (isalpha (buf[i]))
buf[i] = toupper (buf[i]);
}
write (fd_two, buf, 1024);
ret = read (fd_two, buf, 1024);
}
close (fd_two);
}
::::::::::::::
udp-common.h
::::::::::::::
/**
* $Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
*/
#define PORT 18418
::::::::::::::
udpclient.c
::::::::::::::
/*
* $Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include "udp-common.h"
main (int argc, char *argv[])
{
struct sockaddr_in saddr;
struct hostent *hp;
int sock;
int len;
int buflen;
char buf[1024];
int ret;
if (argc != 2) {
printf ("Usage: %s [SERVER_NAME]\n", argv[0]);
exit (1);
}
if ((sock = socket (AF_INET, SOCK_DGRAM, 0)) < 0) {
perror ("socket");
exit (1);
}
bzero ((char *) &saddr, sizeof (saddr));
if ((hp = gethostbyname (argv[1])) == NULL) {
perror ("No such host");
exit (1);
}
bcopy (hp->h_addr, &saddr.sin_addr, hp->h_length);
saddr.sin_family = AF_INET;
saddr.sin_port = htons (PORT);
while (fgets (buf, 1024, stdin)) {
buflen = strlen (buf);
if (sendto (sock, buf, buflen, 0, (struct sockaddr *) &saddr, sizeof (saddr)) != buflen) {
perror ("sendto");
exit (1);
}
if ((ret = recvfrom (sock, buf, 1024, 0, NULL, &len)) < 0) {
perror ("recvfrom");
exit (1);
}
buf[ret] = '\0';
printf ("%s", buf);
}
close (sock);
exit (0);
}
::::::::::::::
udpserver.c
::::::::::::::
/*
$Id: socket.html,v 1.1 2009/06/22 16:12:26 kishi Exp kishi $
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include "udp-common.h"
main ()
{
int i;
int fd_one, fd_two;
struct sockaddr_in saddr;
struct sockaddr_in caddr;
int len;
int ret;
char buf[1024];
if ((fd_one = socket (AF_INET, SOCK_DGRAM, 0)) < 0) {
perror ("socket");
exit (1);
}
bzero ((char *) &saddr, sizeof (saddr));
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = INADDR_ANY;
saddr.sin_port = htons (PORT);
if (bind (fd_one, (struct sockaddr *) &saddr, sizeof (saddr)) < 0) {
perror ("bind");
exit (1);
}
len = sizeof (caddr);
while (1) {
if ((ret = recvfrom (fd_one, buf, 1024, 0, (struct sockaddr *) &caddr, &len)) < 0) {
perror ("recvfrom");
exit (1);
}
/** modify LOWERCASE to UPPERCASE */
for (i = 0; i < ret; i++) {
if (isalpha (buf[i]))
buf[i] = toupper (buf[i]);
}
if (sendto (fd_one, buf, ret, 0, (struct sockaddr *) &caddr, len) != ret) {
perror ("sendto");
exit (1);
}
}
}
戻る