TCP服务端和客户端(5)

      在原来客户端代码的基础上,先调用signal()注册SIGINT和SIGPIPE信号的处理函数,然后连接服务器并进行数据处理。

#include <stdio.h>
#include <stdlib.h>
#include <strings.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <signal.h>
extern void sig_proccess(int signo);
extern void sig_pipe(int signo);
static int s;
void sig_proccess_client(int signo)			/*客户端信号处理回调函数*/
{
	printf("Catch a exit signal\n");			/*打印信息*/
	close(s);									/*关闭套接字*/
	exit(0);									/*退出程序*/
}
#define PORT 8888								/*侦听端口地址*/
int main(int argc, char*argv[])
{
	struct sockaddr_in server_addr;			/*服务器地址结构*/
	int err;									/*返回值*/
		
	if(argc == 1){
		printf("PLS input server addr\n");
		return 0;	
	}
	signal(SIGINT, sig_proccess);				/*挂接SIGINT信号,处理函数为												  sig_process()*/
	signal(SIGPIPE, sig_pipe);	/*挂接SIGPIPE信号,处理函数为sig_pipe()*/
	
	s = socket(AF_INET, SOCK_STREAM, 0);		/*建立一个流式套接字*/
	if(s < 0){									/*建立套接字出错*/
		printf("socket error\n");
		return -1;	
	}	
	
	/*设置服务器地址*/
	bzero(&server_addr, sizeof(server_addr));	/*将地址结构清零*/
	server_addr.sin_family = AF_INET;			/*将协议族设置为AF_INET*/
	server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
												/*IP地址为本地任意IP地址*/
	server_addr.sin_port = htons(PORT);		/*设置服务器端口为8888*/
	
	inet_pton(AF_INET, argv[1], &server_addr.sin_addr);
								/*将用户输入的字符串类型的IP地址转为整型*/
	connect(s, (struct sockaddr*)&server_addr, sizeof(struct sockaddr));
												/*连接服务器*/
	process_conn_client(s);						/*客户端处理过程*/
	close(s);									/*关闭连接*/
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的幸运儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值