易网时代-编程资源站
Welcome
微信登录
编程资源
图片资源库
蚂蚁家优选
PDF转换器
软件资源
软件开发
、
小程序制作
、
系统集成与运维
、
空间租用
、
硬件开发
、
视频监控
、
技术咨询与支持
——联系电话:0311-88999002/88999003
首页
/
操作系统
/
Linux
/
Linux下基于TCP简单的Socket通信程序
服务器端程序:
#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <string.h>
#include <errno.h>
#define PORT 2370
#define BACKLOG 2
#define IP
"192.168.1.12"
void
process_conn_server(
int
s,
char
* ip);
int
main(
int
argc,
char
*argv[])
{
int
ss,sc;
struct
sockaddr_in server_addr;
struct
sockaddr_in client_addr;
int
err;
pid_t pid;
//创建套接字
ss=socket(AF_INET,SOCK_STREAM,0);
if
(ss<0)
{
printf(
"socket error "
);
return
-1;
}
//设置服务器端的地址,端口等
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;
bzero(&(server_addr.sin_zero), 8);
//将创建的套接字绑定到服务器端
err = bind(ss, (
struct
sockaddr *)&server_addr,
sizeof
(
struct
sockaddr));
if
(err<0)
{
printf(
"bind error "
);
return
-1;
}
//监听套接字
err=listen(ss,BACKLOG);
if
(err<0)
{
printf(
"listen error "
);
return
-1;
}
//主循环程序
for
(;;)
{
int
addrlen=
sizeof
(
struct
sockaddr);
sc=accept(ss,(
struct
sockaddr*)&client_addr,&addrlen);
//如果调用成功,www.linuxidc.com将返回一个新的套接字与客户端通信
printf(
"%s has connected success "
,inet_ntoa(client_addr.sin_addr));
if
(sc<0)
{
continue
;
}
pid=fork();
//创建一个进程与客户端通信
if
(pid==0)
{
close(ss);
//为了避免影响,在子进程中关闭父进程套接字,父进程关闭子进程的套接字(并没有真正的关闭,只是让它们不相互影响)
process_conn_server(sc,inet_ntoa(client_addr.sin_addr));
//调用子进程通信函数
}
else
{
close(sc);
}
}
}
void
process_conn_server(
int
s,
char
*ip)
{
char
buffer[1024];
while
(1)
{
memset(buffer,
" "
,1024);
//置空
recv(s,buffer,1024,0);
//接收消息www.linuxidc.com
if
(strncmp(
"end"
,buffer,3)==0)
//判断是否符合退出条件
{
printf(
"%s has lost connect "
,ip);
close(s);
exit(EXIT_SUCCESS);
}
printf(
"%s say :%s "
,ip,buffer);
//统计客户端输出的字符个数并发送给客户端
sprintf(buffer,
"%d characters altogether"
,strlen(buffer)-1);
send(s,buffer,1024,0);
}
}
收藏该网址
版权所有©石家庄振强科技有限公司2024
冀ICP备08103738号-5
网站地图