易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
一步一步学Linux C:Socket实例
客户端:
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#define SERVER_PORT 20000 // define the defualt connect port id
#define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port
#define BUFFER_SIZE 255
#define REUQEST_MESSAGE "welcome to connect the server. "
void
usage(
char
* name)
{
printf(
" usage: %s IpAddr "
,name);
}
int
main(
int
argc,
char
** argv)
{
int
servfd,clifd,length = 0;
struct
sockaddr_in servaddr,cliaddr;
socklen_t socklen =
sizeof
(servaddr);
char
buf[BUFFER_SIZE];
if
(argc < 2 )
{
usage(argv[ 0 ]);
exit( 1 );
}
if
((clifd = socket(AF_INET,SOCK_STREAM, 0 )) < 0 )
{
printf(
" create socket error! "
);
exit( 1 );
}
srand(time(NULL));
// initialize random generator
bzero( & cliaddr,
sizeof
(cliaddr));
cliaddr.sin_family = AF_INET;
cliaddr.sin_port = htons(CLIENT_PORT);
cliaddr.sin_addr.s_addr = htons(INADDR_ANY);
bzero( & servaddr,
sizeof
(servaddr));
servaddr.sin_family = AF_INET;
inet_aton(argv[ 1 ], & servaddr.sin_addr);
servaddr.sin_port = htons(SERVER_PORT);
// servaddr.sin_addr.s_addr = htons(INADDR_ANY);
if
(bind(clifd, (
struct
sockaddr* ) &cliaddr,
sizeof
(cliaddr)) < 0 )
{
printf(
" bind to port %d failure! "
,CLIENT_PORT);
exit( 1 );
}
if
(connect(clifd,(
struct
sockaddr * ) & servaddr, socklen) < 0 )
{
printf(
" can"t connect to %s! "
, argv[ 1 ]);
exit( 1 );
}
length = recv(clifd, buf, BUFFER_SIZE, 0);
if
(length < 0)
{
printf(
" error comes when recieve data from server %s! "
, argv[1] );
exit( 1 );
}
printf(
" from server %s : %s"
, argv[1], buf);
close(clifd);
return
0;
}
服务器端:
#include <stdio.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <time.h>
#define SERVER_PORT 20000 // define the defualt connect port id
#define LENGTH_OF_LISTEN_QUEUE 10 // length of listen queue in server
#define BUFFER_SIZE 255
#define WELCOME_MESSAGE "welcome to connect the server. "
int
main(
int
argc,
char
** argv)
{
int
servfd,clifd;
struct
sockaddr_in servaddr,cliaddr;
if
((servfd = socket(AF_INET,SOCK_STREAM, 0 )) < 0 )
{
printf(
" create socket error! "
);
exit( 1 );
}
bzero( & servaddr,
sizeof
(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERVER_PORT);
servaddr.sin_addr.s_addr = htons(INADDR_ANY);
if
(bind(servfd,(
struct
sockaddr * ) & servaddr,
sizeof
(servaddr)) < 0 )
{
printf(
" bind to port %d failure! "
,SERVER_PORT);
exit( 1 );
}
if
(listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0 )
{
printf(
" call listen failure! "
);
exit( 1 );
}
while
( 1 )
{
// server loop will nerver exit unless any body kill the process
char
buf[BUFFER_SIZE];
long
timestamp;
socklen_t length =
sizeof
(cliaddr);
clifd = accept(servfd,(
struct
sockaddr * ) & cliaddr, & length);
if
(clifd < 0 )
{
printf(
" error comes when call accept! "
);
break
;
}
strcpy(buf,WELCOME_MESSAGE);
// inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);
printf(
" from client,IP:%s,Port:%d "
,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));
timestamp = time(NULL);
strcat(buf,
" timestamp in server: "
);
strcat(buf,ctime( & timestamp));
send(clifd,buf,BUFFER_SIZE, 0 );
close(clifd);
}
// exit
close(servfd);
return
0 ;
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图