小鱼儿--控制台p2p聊天工具(里面)
自己这1天看了好多有关网络编程视频+加书籍。。感觉其实都差不多,看了高手说得很简洁明了。所以看书和视频还是要看高手,名师的。
一些二流人确实差多了,说也不说清,只要糊弄过就算了。
发现看了那么多,还不与早点写代码,就不会浪费自己一天的时间看他们。早点写还好一点。。
本想用select模型。但我发现我这样的控制台没有用。一样像那么一回事。
申明:pcc32.h 是一位高手RedOc写的函数库。 我直接拿来用了,省的自己写。。。
本想在控制台画矩形的,由于难得麻烦。自己直接用直线代替了,但由于中文字符有间隔,根本就不能连起来。。。
本想加一个可以加一个后门程序,没有精力写了,没有时间了,又到了期末了,还是要看下书。。。。
直接贴图:
程序代码:
#include "StdAfx.h" #include "Server.h" #include <string.h> #include "pcc32.h" #include "MyLine.h" #include "Init.h" Pos xyPos={1,1}; DWORD WINAPI ServerThreadFun(LPVOID laparam) { char buf[256]; SOCKET m_sock=*(SOCKET *)laparam; while(1) { gotoxy(6,21); /*puts("send:");*/ gets(buf); Sleep(50); ClearThere(6,21,65,23); int flag=send(m_sock,buf,256,0); if(flag) { gotoxy(42,15); puts("发送成功"); } } return 1; } int TcpServer() { WSADATA data; ZeroMemory(&data,sizeof(data)); WSAStartup(MAKEWORD(2,0),&data); SOCKET sListen=socket(AF_INET,SOCK_STREAM,0); if(sListen==INVALID_SOCKET) { return FALSE; } sockaddr_in local={0},client; local.sin_family=AF_INET; local.sin_addr.S_un.S_addr=htonl(INADDR_ANY); local.sin_port=htons(1808); if(bind(sListen,(sockaddr *)&local,sizeof(sockaddr_in))==SOCKET_ERROR) { return FALSE; } if(listen(sListen,5)==SOCKET_ERROR) { return FALSE; } gotoxy(42,8); puts("服务已经启动"); int addrlen=sizeof(sockaddr_in); SOCKET sClient=accept(sListen,(sockaddr *)&client,&addrlen); char buf[256]={0}; sprintf(buf,"IP:%s 端口%d",inet_ntoa(client.sin_addr),ntohs(client.sin_port)); gotoxy(42,12); puts(buf); gotoxy(6,21); CreateThread(NULL,0,ServerThreadFun,&sClient,0,0); while(1) { char buf[256]; int flag=recv(sClient,buf,sizeof(buf),0); if(flag<=0) { gotoxy(42,15); puts("你的朋友已经下线了"); break; } else { gotoxy(xyPos.x,xyPos.y); puts(buf); xyPos.x=getCursorX(); xyPos.y=getCursorY(); if(xyPos.y>=19) { ClearThere(0,1,38,19); xyPos.x=1; xyPos.y=1; } } gotoxy(6,21); } closesocket(sClient); closesocket(sListen); WSACleanup(); return 1; }