server端程序:
#include <stdio.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netdb.h>
#include <netinet/in.h>
#include <fcntl.h>
#define SOCKPORT 0x1234
#define MAXBUFLEN 255
int main( int argc, char **argv )
{
int iLength;
struct sockaddr_in bind_in;
struct sockaddr_in accept_in;
int iSocket, iAcceptSocket;
char szBuffer[ MAXBUFLEN + 1 ];
char szBufTemp[ 10 + 1 ];
iSocket = socket( AF_INET, SOCK_STREAM, 0 );
if ( iSocket < 0 )
{
perror( "socket( AF_INET, SOCK_STREAM, 0 )" );
exit( -1 );
}
bzero( bind_in, sizeof(bind_in) );
bind_in.sin_family = AF_INET;
bind_in.sin_addr.s_addr = INADDR_ANY;
bind_in.sin_port = htons( SOCKPORT );
iLength = sizeof( bind_in );
if ( bind(iSocket, (struct sockaddr*)&bind_in, iLength) < 0 )
{
perror( "bind socket!" );
exit( -1 );
}
if ( listen(iSocket, 5) < 0 )
{
perror( "listen socket!" );
exit( -1 );
}
for ( ; ; )
{
iAcceptSocket = accept( iSocket,
(struct sockaddr*)&accept_in, (int *)&iLength );
if ( iAcceptSocket == -1 )
{
continue;
}
if ( fork() > 0 )
{
close( iAcceptSocket );
continue;
}
printf( "the child pid = [%d]\n", getpid() );
memset( szBuffer, 0x0, sizeof(szBuffer) );
do
{
memset( szBufTemp, 0x0, sizeof(szBufTemp) );
iLength = read( iAcceptSocket, szBufTemp, 10 );
strncat( szBuffer, szBufTemp, iLength );
}while ( iLength == 10 );
strcat( szBuffer, "\nread completed!" );
write( iAcceptSocket, szBuffer, sizeof(szBuffer) );
close( iAcceptSocket );
close( iSocket );
exit( 0 );
} /* end of for */
}
Client端程序:
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define SERVPORT 0x1234
#define MAXBUFLEN 255
int main( int argc, char ** argv )
{
struct sockaddr_in connect_in;
int iLength;
int iSocket;
char szHostAddress[] = "192.1.1.111";
char szBuffer[ MAXBUFLEN + 1 ];
char szBufTemp[ 10 + 1 ];
bzero( &connect_in, sizeof(connect_in) );
connect_in.sin_family = AF_INET;
connect_in.sin_addr.s_addr = inet_addr( szHostAddress );
connect_in.sin_port = htons( SERVPORT );
if ( (iSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0 )
{
perror( "socket SOCK_STREAM, IPPROTO_TCP error!" );
exit( -1 );
}
if ( connect(iSocket, (struct sockaddr*)&connect_in,
sizeof(connect_in)) < 0 )
{
perror( "connect error!" );
exit( -1 );
}
memset( szBuffer, 0x0, sizeof(szBuffer) );
strcpy( szBuffer, "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" );
if ( write(iSocket, szBuffer, sizeof(szBuffer)) < 0 )
{
perror( "write to server error!" );
close( iSocket );
exit( -1 );
}
memset( szBuffer, 0x0, sizeof(szBuffer) );
do
{
memset( szBufTemp, 0x0, sizeof(szBufTemp) );
iLength = read( iSocket, szBufTemp, 10 );
strncat( szBuffer, szBufTemp, iLength );
}while ( iLength == 10 );
printf( "The answer is : [%s]\n", szBuffer );
close( iSocket );
exit( 0 );
}