TCP Client Example
#include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #in Clude <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <u nistd.h> #include <sys/types.h> #include <sys/socket.h> typedef struct _NSS_HEADER {unsigned shor T protocolversion; /* Protocol version Information * * unsigned short msgtype; /* Message Type * * unsigned short Transactionno; /* Transmission Number * * unsigned short packetlength;
/* packet length, including HEADER */}nss_header;
int Str_echo (int sockfd, unsigned short no) {ssize_t readlen;
ssize_t Writelen;
Char Buf[8];
Nss_header *HDR = (nss_header*) buf;
memset (HDR, 0, sizeof (nss_header));
Hdr->transactionno = no;
Write data int nwritelen = 0;
while (true) {Writelen = write (SOCKFD, &buf[nwritelen], sizeof (Nss_header)-nwritelen);
printf ("Write%d/n", Writelen); if (WRITelen < 0 && errno = = eintr) {continue;
else if (Writelen < 0) {perror ("write:");
return-1;
} Nwritelen + = Writelen;
Finished writing, return directly if (Nwritelen >= sizeof (Nss_header)) {break; } printf ("Send data successed.")
Trans No:%d/n ", no);
Read Data int nreadlen = 8;
while (true) {Readlen = Read (SOCKFD, buf, Nreadlen);
printf ("read:%d/n", Readlen);
if (Readlen < 0 && errno = = eintr) {continue;
else if (Readlen <= 0) {perror ("read:");
return-1;
else {Nreadlen-= Readlen;
if (Nreadlen <= 0) {break;
} printf ("Read response successed./n");
return 0;
int main (int argc, char **argv) {printf ("Client IP:%s/n", argv[1]);
printf ("Client port:%s/n", argv[2]); printf ("Server IP:%s/n", argv[3]);
printf ("Server port:%s/n", argv[4]);
printf ("/N Service starting.../n/n");
while (true) {int socketfd;
struct sockaddr_in svraddr;
struct sockaddr_in localaddr;
SOCKETFD = socket (af_inet, sock_stream, 0);
if (-1 = socketfd) {perror ("socket:");
Continue
//SET ADDRESS reusable int option = 1;
SetSockOpt (SOCKETFD, Sol_socket, so_reuseaddr, &option, sizeof (option));
Client IP memset (&localaddr, 0, sizeof (LOCALADDR));
localaddr.sin_family = af_inet;
LOCALADDR.SIN_ADDR.S_ADDR = inet_addr (argv[1]);
Localaddr.sin_port = htons (atoi (argv[2));
int bindresult = bind (Socketfd, (struct sockaddr *) &localaddr, sizeof (LOCALADDR));
if (-1 = bindresult) {perror ("bind:");
Sleep (10);
Close (SOCKETFD);
Continue
}//server IP memset (&svraddr, 0, sizeof (SVRADDR));
svraddr.sin_family = af_inet; Svraddr. sin_addr.s_addr = inet_addr (argv[3]);
Svraddr.sin_port = htons (atoi (argv[4));
continuously connected int connresult = connect (socketfd, (struct sockaddr *) &svraddr, sizeof (SVRADDR));
if (-1 = connresult) {perror ("Connect:");
Sleep (10);
Close (SOCKETFD);
Continue
printf ("Connect%s:%s successed./n", argv[3], argv[4]);
static unsigned short no = 0;
Connection successful, send data per minute for (;;)
{if (-1 = = Str_echo (socketfd, no++)) {break;
Sleep (60);
Close (SOCKETFD);
}
}
TCP Server Source code example
#include <errno.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #in Clude <stdlib.h> #include <string.h> #include <netinet/in.h> #include <stdio.h> #include <u nistd.h> #include <sys/types.h> #include <sys/socket.h> struct _nss_header {unsigned short Pr Otocolversion; /* Protocol version Information * * unsigned short msgtype; /* Message Type * * unsigned short Transactionno; /* Transmission Number * * unsigned short packetlength;
/* packet length, including HEADER */}nss_header;
void Str_echo (int sockfd) {ssize_t readlen;
ssize_t Writelen;
Char Buf[8];
while (true) {Readlen = Read (SOCKFD, buf, 8);
if (Readlen < 0 && errno = = eintr) {continue;
else if (Readlen <= 0) {perror ("read:");
return; printf ("recv data successed.")
Data len:%d/n ", Readlen);
int nwritelen = 0; while (tRue) {Writelen = = write (SOCKFD, &buf[nwritelen), Readlen-nwritelen);
if (Writelen < 0 && errno = = eintr) {continue;
else if (Writelen < 0) {perror ("write:");
Return
} Nwritelen + = Writelen;
has been written, directly returns if (Nwritelen >= Readlen) {break; } printf ("Send data successed.")
Data len:%d/n ", Readlen);
int main (int argc, char **argv) {printf ("Server IP:%s/n", argv[1));
printf ("Server port:%s/n", argv[2]);
printf ("/nservice starting .../n/n");
int LISTENFD, CONNFD;
pid_t Childpid;
Socklen_t Clilen;
struct sockaddr_in cliaddr, servaddr;
LISTENFD = socket (af_inet, sock_stream, 0);
if (-1 = listenfd) {perror ("socket:");
Exit (-1);
//SET ADDRESS reusable int option = 1; SetSockOpt (LISTENFD, Sol_socket, so_reuseaddr, &option, sizeof (option));
memset (&servaddr, 0, sizeof (SERVADDR));
servaddr.sin_family = af_inet;
SERVADDR.SIN_ADDR.S_ADDR = inet_addr (argv[1]);
Servaddr.sin_port = htons (atoi (argv[2));
int bindresult = bind (LISTENFD, (struct sockaddr *) &servaddr, sizeof (SERVADDR));
if (-1 = bindresult) {perror ("bind:");
Exit (-1);
int listenresult = Listen (LISTENFD, 5);
if (-1 = listenresult) {perror ("listen:");
Exit (-1);
for (;;)
{Clilen = sizeof (CLIADDR);
CONNFD = Accept (LISTENFD, (struct sockaddr *) &cliaddr, &clilen);
if (-1 = connfd) {perror ("Accept:");
Continue
printf ("Accept%s SUCCESSED.FD:%d/n", Inet_ntoa (CLIADDR.SIN_ADDR), CONNFD); if ((Childpid = fork ()) = = 0) {/* child process */close (LISTENFD); /* Close Listening socket * * STR_ECHO (CONNFD); /* Process the request/printf ("Disconnect from%d./n", CONNFD);
Exit (0); } close (CONNFD); /* Parent Closes connected socket */}