📄 qqser.c
字号:
/****************************************************************
** 程序名称: qq.c (QQ宝贝,unix下的客户机程序) **
** 作者 : 关辉 **
** 版本 : 1.0 **
** 修改时间: 2003年3月6号 **
** 功能 : UNIX下的聊天软件,可以双方相互对话 **
*****************************************************************/
#define SCO
#include <stdio.h>
#ifdef SCO
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <curses.h>
#endif
#ifdef AIX
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <curses.h>
#endif
#define ip0 "10.100.0.5"
#define ip1 "10.100.0.9"
int n,i,j,m;
char buf[19][1024];
picture()
{
move(0,10);
addstr("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
move(22,10);
addstr("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
move(4,12);
addstr("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
move(20,12);
addstr("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
for(m=1;m<22;m++)
{
move(m,10);
addstr("┃");
move(m,70);
addstr("┃");
}
move(1,34);
addstr("QQ宝贝");
move(2,30);
addstr("━━━━━━");
move(2,55);
addstr("作者:关辉");
move(3,55);
addstr("版本:1.0");
move(22,10);
addstr("┗");
move(22,70);
addstr("┛");
move(0,10);
addstr("┏");
move(0,70);
addstr("┓");
move(21,12);
addstr("自己:");
move(21,18);
refresh();
}
main()
{
struct sockaddr_in lo,se,zd;
int sock,socklen;
char c;
n=5;
i=0;
initscr();
clear();
picture();
socklen=sizeof(struct sockaddr_in);
sock=socket(AF_INET,SOCK_DGRAM,0);
if(sock<0)
{
printf("连接失败\n");
endwin();
exit(1);
}
memset(&lo,0,socklen);
lo.sin_family=AF_INET;
lo.sin_port=htons(6800);
if(inet_pton(AF_INET,ip0,&lo.sin_addr)<=0)
{
printf("本方IP地址错误\n");
endwin();
exit(2);
}
memset(&se,0,socklen);
se.sin_family=AF_INET;
se.sin_port=htons(6800);
if(inet_pton(AF_INET,ip1,&se.sin_addr)<=0)
{
printf("对方IP地址错误\n");
endwin();
exit(3);
}
if(bind(sock,(struct sockaddr *)&lo,socklen)<0)
{
printf("不能运行两个QQ宝贝,或端口出错 \n");
endwin();
exit(0);
}
while((c=getch())!='\n')
{
buf[n][i]=c;
i++;
}
move(5,12);
addstr(buf[n]);
move(21,18);
addstr(" ");
move(21,18);
refresh();
i=0;
if(sendto(sock,buf[n],strlen(buf[n]),0,(struct sockaddr *)&se,socklen)<0)
{
printf("发送数据错误 \n");
endwin();
exit(0);
}
n++;
for(;;)
{
j=recvfrom(sock,buf[n],100,0,(struct sockaddr *)&se,&socklen);
if(j<0)
{
printf("接收数据错误\n");
endwin();
exit(2);
}
/*** add()确定显示在哪行上,如果大于19,就让每行都上移一行,即滚屏 **/
add();
n++;
while((c=getch())!='\n')
{
buf[n][i]=c;
i++;
}
add();
move(21,18);
addstr(" ");
move(21,18);
refresh();
if(sendto(sock,buf[n],strlen(buf[n]),0,&se,socklen)<0)
{
printf("发送数据错误 \n");
endwin();
exit(0);
}
n++;
move(21,18);
refresh();
}
endwin();
}
add()
{
if(n==19)
{
/****
m=n;
for(n=6;n<20;n++)
{
strcat(buf[n-1],buf[n]);
move(n,12);
addstr(buf[n]);
move(21,18);
}
refresh();
n=m;
}
*****/
clear();
picture();
n=5;
move(n,12);
addstr(buf[n]);
}
else
{
move(n,12);
addstr(buf[n]);
}
move(21,18);
refresh();
i=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -