星期四, 5月 17, 2007

Network Programming

TCP

TcpEchoServer1.c

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <errno.h>

int main(int argc,char *argv[])
{
int iServerActive,iIncomingBytes;
int iSocketFD,iConnectedFD;
pid_t pid_tChildPid;
char buffer[1000];
socklen_t socklen_tClientLen;
struct sockaddr_in sockaddr_inClientAddress;
struct sockaddr_in sockaddr_inServerAddress;

if(argc != 2)
{
printf("Usage:n");
printf("./TcpEchoServer1.exe [Port number]n");
printf("Port number example: 12345n");
exit(1);
}

if((iSocketFD=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket errorn");
exit(1);
}

memset(&sockaddr_inServerAddress,0,
sizeof(sockaddr_inServerAddress));

sockaddr_inServerAddress.sin_family=AF_INET;
sockaddr_inServerAddress.sin_addr.s_addr=
htonl(INADDR_ANY);
sockaddr_inServerAddress.sin_port=htons(atoi(argv[1]));

if(bind(iSocketFD,
(struct sockaddr *)&sockaddr_inServerAddress,
sizeof(sockaddr_inServerAddress)) < 0)
{
printf("bind errorn");
exit(1);
}
if(listen(iSocketFD,3)<0)
{
printf("listen errorn");
exit(1);
}

iServerActive=1;
while(iServerActive)
{
socklen_tClientLen=sizeof(sockaddr_inClientAddress);
if((iConnectedFD=accept(iSocketFD,(struct sockaddr *)
&sockaddr_inClientAddress,&socklen_tClientLen))<0)
{
printf("accept error");
exit(1);
}

printf("Connect from %sn",
inet_ntoa(sockaddr_inClientAddress.sin_addr));

while(1)
{
memset(buffer,0,1000);
if(iIncomingBytes=
read(iConnectedFD,buffer,sizeof(buffer))>0)
{
printf("%s",buffer);
if(write(iConnectedFD,buffer,sizeof(buffer)) < 0)
{
printf("send error!");
exit(1);
}
}
}
}
}

TcpEchoClient.c

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <errno.h>

int main(int argc,char *argv[])
{
int iSocketFD;
char buffer[1000];
int iIncomingBytes;
struct sockaddr_in sockaddr_inServerAddress;

if(argc !=3)
{
printf("Usage: ./TcpEchoClient.exe
n <IP address> <Port number>n");
exit(1);
}

if((iSocketFD=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket errorn");
exit(1);
}

memset(&sockaddr_inServerAddress,
0,
sizeof(sockaddr_inServerAddress));
sockaddr_inServerAddress.sin_family=AF_INET;
sockaddr_inServerAddress.sin_addr.s_addr=inet_addr(argv[1]);
sockaddr_inServerAddress.sin_port=htons(atoi(argv[2]));

if(connect(iSocketFD,
(struct sockaddr *)
&sockaddr_inServerAddress,
sizeof(sockaddr_inServerAddress)) < 0)
{
printf("connect errorn");
exit(1);
}

while(fgets(buffer,1000,stdin)!=NULL)
{
if(write(iSocketFD,buffer,strlen(buffer))<0)
{
perror("send error");
exit(0);
}
if(iIncomingBytes=read(iSocketFD,buffer,sizeof(buffer))>0)
{
printf("%s",buffer);
}
memset(buffer,0,1000);
}
exit(0);
}

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <sys/wait.h>
#include <errno.h>
int main(int argc,char *argv[])
{
int iServerActive,iIncomingBytes,iSocketFD,iConnectedFD;
pid_t pid_tChildPid;
socklen_t socklen_tClientLen;
struct sockaddr_in sockaddr_inClientAddress;
struct sockaddr_in sockaddr_inServerAddress;
char buffer[1000];
if(argc != 2)
{
printf("Usage:n");
printf("./TcpEchoServer2.exe [Port number]n");
printf("Port number example: 12345n");
exit(1);
}
if((iSocketFD=socket(AF_INET,SOCK_STREAM,0))<0)
{
printf("socket errorn");
exit(1);
}
memset(&sockaddr_inServerAddress,
0,
sizeof(sockaddr_inServerAddress));
sockaddr_inServerAddress.sin_family=AF_INET;
sockaddr_inServerAddress.sin_addr.s_addr=
htonl(INADDR_ANY);
sockaddr_inServerAddress.sin_port=htons(atoi(argv[1]));
if (bind(iSocketFD,
(struct sockaddr *) &sockaddr_inServerAddress,
sizeof(sockaddr_inServerAddress)) < 0)
{
printf("bind errorn");
exit(1);
}
if(listen(iSocketFD,3)<0)
{
printf("listen errorn");
exit(1);
}
iServerActive=1;
while(iServerActive)
{
socklen_tClientLen=sizeof(sockaddr_inClientAddress);
if((iConnectedFD=accept(iSocketFD,(struct sockaddr *)
&sockaddr_inClientAddress,&socklen_tClientLen))<0)
{
printf("accept error");
exit(1);
}
if((pid_tChildPid = fork()) == -1)
{
printf("accept error");
exit(1);
}
if(pid_tChildPid == 0)
{
if (close(iSocketFD) == -1)
{
printf("close error");
exit(1);
}
printf("Connect from %sn",
inet_ntoa(sockaddr_inClientAddress.sin_addr));
while(1)
{
memset(buffer,0,1000);
if(iIncomingBytes=
read(iConnectedFD,buffer,sizeof(buffer))>0)
{
printf("%s",buffer);
if(write(iConnectedFD,
buffer,
sizeof(buffer)) < 0)
{
printf("send error!");
exit(1);
}
}
}
exit(0);
}
if (close(iConnectedFD) == -1)
{
printf("close error");
exit(1);
}
}
}

UDP

UdpServer.c

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

main(int argc,char *argv[])
{
int SockFD,Len;
struct sockaddr_in Addr;
int AddrLen=sizeof(struct sockaddr_in);
char cTemp[1000];

if(argc != 2)
{
printf("Usage : udpserver [port number]n");
printf("Example: udpserver 12345n");
exit(1);
}

if((SockFD=socket(AF_INET,SOCK_DGRAM,0))<0)
{
printf("socket error!");
exit(1);
}

memset(cTemp,0,1000);
Addr.sin_family = AF_INET;
Addr.sin_port = htons(atoi(argv[1]));
Addr.sin_addr.s_addr = htonl(INADDR_ANY);

if(bind(SockFD,&Addr,sizeof(Addr))<0)
{
printf("bind error!");
exit(1);
}

while(1)
{
memset(cTemp,0,1000);
Len=recvfrom(SockFD,
cTemp,
sizeof(cTemp),
0,
&Addr,
&AddrLen);
if(Len>0)
{
printf("receive %sn",cTemp);
printf("Received data = %s, length = %d bytes, received from %sn",
cTemp,
Len,
inet_ntoa(Addr.sin_addr));
sendto(SockFD,cTemp,Len,0,&Addr,AddrLen);
}
}
}

UdpClient.c

#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


main(int argc,char *argv[])
{
int SockFD,Len;
struct sockaddr_in Addr;
int AddrLen=sizeof(struct sockaddr_in);
char cTemp[1000];

if(argc != 3)
{
printf("Usage:n");
printf("udpclient [IP address] [Port number]nn");
printf("IP address example: 192.168.181.222n");
printf("Port number example: 12345n");
exit(1);
}

if((SockFD=socket(AF_INET,SOCK_DGRAM,0))<0)
{
printf("socket error");
exit(1);
}

memset(&Addr,0,sizeof(Addr));
Addr.sin_family = AF_INET;
Addr.sin_port = htons(atoi(argv[2]));
Addr.sin_addr.s_addr = inet_addr(argv[1]);

while(1)
{
memset(cTemp,0,1000);
Len=read(STDIN_FILENO,cTemp,sizeof(cTemp));
sendto(SockFD,cTemp,Len,0,&Addr,AddrLen);
Len=recvfrom(SockFD,
cTemp,
sizeof(cTemp),
0,
&Addr,
&AddrLen);
printf("receive %sn",cTemp);
}
}

0 意見: