作者:LAMP小白 点击:2374 发布日期:2012-12-16 22:22:00 返回列表
一个完整的socket程序
首先是服务器端
#include mio_lt;stdio.hmio_gt; #include mio_lt;stdlib.hmio_gt; #include mio_lt;string.hmio_gt; #include mio_lt;sys/types.hmio_gt; #include mio_lt;sys/socket.hmio_gt; #include mio_lt;unistd.hmio_gt; #include mio_lt;netinet/in.hmio_gt; #define PORT 8888 #define BACKLOG 2 int main( int argc, char *argv[] ) { int server_socket, client_socket, err, size; struct sockaddr_in server_addr; struct sockaddr_in client_addr; pid_t pid; char buffer[1024]; server_socket = socket( AF_INET, SOCK_STREAM, 0 ); if( -1 == server_socket ) { printf("socket err!n"); return -1; } bzero( mio_amp;server_addr, sizeof(server_addr) ); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl( INADDR_ANY ); server_addr.sin_port = htons( PORT ); err = bind( server_socket, (struct sockaddr*) mio_amp;server_addr, sizeof(server_addr) ); if( -1 == err ) { printf("bind failure!n"); return -1; } err = listen( server_socket, BACKLOG ); if( -1 == err ) { printf("listen err or clients full!n"); return -1; } printf("server start!n"); int addrlen = sizeof( struct sockaddr_in ); printf("len=%dn", addrlen); client_socket = accept( server_socket, ( struct sockaddr* ) mio_amp;client_addr, mio_amp;addrlen ); if( -1 == client_socket ) { printf("client connect failure!n"); } else { size = read( client_socket, buffer, 1024); if( 0 == size ) { printf("no data...n"); } else { printf("data is %sn", buffer); write( client_socket, buffer, 1024); } } close(server_socket); return 0; }
然后是客户端
#include mio_lt;stdio.hmio_gt; #include mio_lt;stdlib.hmio_gt; #include mio_lt;string.hmio_gt; #include mio_lt;sys/types.hmio_gt; #include mio_lt;sys/socket.hmio_gt; #include mio_lt;unistd.hmio_gt; #include mio_lt;netinet/in.hmio_gt; #define PORT 8888 int main( void ) { int s, ret, size; struct sockaddr_in server_addr; char str[] = "hello world!"; char buffer[1024]; s = socket( AF_INET, SOCK_STREAM, 0); if( -1 == s ) { printf("socket errorn"); return -1; } bzero( mio_amp;server_addr, sizeof(server_addr) ); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = htonl( INADDR_ANY ); server_addr.sin_port = htons( PORT ); ret = connect( s, (struct sockaddr *)mio_amp; server_addr, sizeof(server_addr) ); printf("ret = %dn", ret); write( s, str, sizeof(str) ); size = read( s, buffer, 1024); if( 0 == size ) { printf("no repeat ... n"); } else { printf("server re data is:%sn", buffer); } close(s); return 0; }
最后是make文件
all:mio_client mio_server client:mio_client.o gcc -o mio_client tcp_client.o server:mio_server.o gcc -o mio_server tcp_server.o clean: rm -f client server *.o
首先make
[root@localhost tcp]# make
make: Warning: File `Makefilemio_#39; has modification time 6.7e+03 s in the future
cc mio_client.c -o mio_client
cc mio_server.c -o mio_server
make: warning: Clock skew detected. Your build may be incomplete.
然后执行服务器端
[root@localhost tcp]# ./mio_server
server start!
len=16
再执行客户端 就完成交互了!
[root@localhost tcp]# ./mio_client
ret = 0
server re data is:hello world!
[root@localhost tcp]#
上一篇:干掉失控的程序 下一篇:快递查询API