linux socket知识点记录

文章目录

client.c

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <netdb.h>
#include <pthread.h>
#include <sys/types.h>
#include <stdarg.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <sys/stat.h> 
#include <dirent.h>
#include <signal.h>

void myprint(char* fmt, ...)
{
	char szPrintBuff[128] = {0};
	int iTmp = 0;
	va_list args;
	time_t now = time(NULL);
	struct tm * ltm = localtime(&now);
	
	iTmp = sprintf(szPrintBuff, "[%04d-%02d-%02d %02d:%02d:%02d]", ltm->tm_year + 1900, ltm->tm_mon+1, ltm->tm_mday, ltm->tm_hour, ltm->tm_min, ltm->tm_sec);
	va_start(args, fmt);
	vsprintf(szPrintBuff + iTmp, fmt, args);
	va_end(args);
	
	fprintf(stdout,"%s", szPrintBuff);
}

#if 0
/*这个结构用来存储套接字地址*/
struct sockaddr 
{
	unsigned short sa_family; /* address族, AF_xxx ,一般都是AFINET*/
	char sa_data[14]; /* 14 bytes的协议地址 包含了一些远程电脑的地址、端口和套接字的数目,
						里面的数据是杂的,所以有了sockaddr_in*/
};

/*为了处理 struct sockaddr, 程序员建立了另外一个相似的大小相同的结构 struct sockaddr_in;
struct sockaddr_in (“in” 代表 “Internet”)*/
struct sockaddr_in 
{
	short int sin_family; /* Internet地址族 */
	unsigned short int sin_port; /* 端口号 网络字节序 htons(),htonl(),ntohs(),ntohl()*/
	struct in_addr sin_addr; /* Internet地址 网络字节序 inet_ntoa(sin_addr)*/
	unsigned char sin_zero[8]; /* 添0(和struct sockaddr一样大小)*/
};
struct in_addr 
{
	unsigned long s_addr;/*inet_addr("166.111.69.52")*/
};
/*注意:inet_ntoa() 返回一个字符指针,它指向一个定义在函数 inet_ntoa() 中的 static 类型字符串。所
以每次你调用 inet_ntoa(),都会改变之前调用 inet_ntoa() 函数时得到的结果。*/
#endif

#define SERVER_PORT 12345
#define MAXDATASIZE 100
#define SERVER_IP "127.0.0.1"

/*
 1) SIGHUP	 	2) SIGINT	 	3) SIGQUIT	 	4) SIGILL	 	5) SIGTRAP
 6) SIGABRT	 	7) SIGBUS	 	8) SIGFPE	 	9) SIGKILL		10) SIGUSR1
11) SIGSEGV		12) SIGUSR2		13) SIGPIPE		14) SIGALRM		15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD		18) SIGCONT		19) SIGSTOP		20) SIGTSTP
21) SIGTTIN		22) SIGTTOU		23) SIGURG		24) SIGXCPU		25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF		28) SIGWINCH	29) SIGIO		30) SIGPWR
31) SIGSYS		34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX
*/
void handleSignal(int value)
{
	switch(value)
	{
		case 2:
			myprint("\n SIGINT : 点击了Ctrl+C 关闭\n");
		break;
		case 3:
			myprint("\n SIGQUIT \n");
		break;
		case 8:
			myprint("\n SIGFPE : 浮点异常\n");
		break;
		case 9:
			myprint("\n SIGKILL \n");
		break;
		case 11:
			myprint("\n SIGSEGV : 段错误\n");
		break;
		case 13:
			myprint("\n SIGPIPE : 管道异常\n");
		break;
		case 15:
			myprint("\n SIGTERM : 被另一个进程关闭\n");
		break;
		default:
			myprint("\n Unknow type %d \n", value);
	}
} 

int main(int argc, char *argv[])
{
	int sockfd = -1;
	int recvbytesnum = 
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值