根据图中的流程,实现一个最简单的TCP程序。
1. 客户端
功能:发送一个字符串给服务器
- /*
- ============================================================================
- Name : SimpleSockTCPClient.c
- Author : wistone
- Version :
- Copyright : 2012 - 2015
- Description : Simple Socket Client
- ============================================================================
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <netinet/in.h>
- int main( int argc, char** argv )
- {
- struct sockaddr_in server_addr_in;
- char buf[100];
- int cfd;
- int port = 8001;
- char *str = "test string";
- if( argc > 1 )
- {
- str = argv[1];
- }
- cfd = socket( AF_INET, SOCK_STREAM, 0 );
- bzero( &server_addr_in, sizeof(server_addr_in) );
- server_addr_in.sin_family = AF_INET;
- server_addr_in.sin_port = htons(port);
- inet_pton( AF_INET, "127.0.0.1", &server_addr_in.sin_addr );
- connect( cfd, (struct sockaddr *)&server_addr_in, sizeof(server_addr_in) );
- send( cfd, str, strlen(str)+1, 0 );
- //write( cfd, str, strlen(str)+1 );
- //read(cfd, buf, 100);
- recv( cfd, buf, 100, 0 );
- close(cfd);
- printf("Recive from server : %s \n", buf);
- return 0;
- }
2. 服务器
把收到的字符串转成大写,然后发回去
- /*
- ============================================================================
- Name : SimpleSockTCPServer.c
- Author : wistone
- Version :
- Copyright : 2012 - 2015
- Description : Simple Socket Server
- ============================================================================
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <arpa/inet.h>
- #include <sys/socket.h>
- int main( int argc , char ** argv )
- {
- struct sockaddr_in saddr, caddr;
- char buf[100] ;
- char str[100] ;
- int listenfd, connfd;
- int addr_len;
- listenfd = socket( AF_INET, SOCK_STREAM, 0 );
- memset ( &saddr, 0, sizeof(saddr) );
- memset( buf, 0, 100 );
- memset( buf, 0, 100 );
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons( 8001 );
- saddr.sin_addr.s_addr = htonl( INADDR_ANY ); //any address
- bind( listenfd, (struct sockaddr *)&saddr, 16 );
- listen( listenfd, 20 );
- printf( "Accepting connections ... \n" );
- int i, n;
- while(1)
- {
- addr_len = sizeof( caddr );
- connfd = accept( listenfd, (struct sockaddr*)&caddr, &addr_len );
- //n = read( listenfd, buf, 100 );
- n = recv( connfd, buf, 100, 0 );
- printf("Recive from %s : %d \n", inet_ntop( AF_INET, &caddr.sin_addr, str, sizeof(str) ), ntohs(caddr.sin_port) );
- for(i=0; i<n; i++)
- {
- buf[i] = toupper( buf[i] );
- }
- //write( connfd, buf, n+1 );
- send( connfd, buf, n+1, 0 );
- printf("Send : %s \n", buf);
- close( connfd );
- }
- return 0;
- }