| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5367 人关注过本帖, 1 人收藏
标题:小鱼儿--控制台p2p聊天工具(里面)
取消只看楼主 加入收藏
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
结帖率:95.74%
收藏(1)
 问题点数:0 回复次数:20 
小鱼儿--控制台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;
}
收到的鲜花
  • Devil_W2011-12-15 15:55 送鲜花  -3朵   附言:知道什么是 P2P吗?
搜索更多相关主题的帖子: 视频 都差不多 网络编程 聊天工具 控制台 
2011-12-13 00:41
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
运行程序附件
小鱼儿p2p聊天.zip (38.05 KB)

大家可能运行可以看看这些控制台细节。
比喻我发送数据后,我send:后面的字符串会消失。
当我接受的数据快要满我那下面的绿线时候会清除,回到上面出。。。

大家如果对源码感兴趣的话,可以留言。。。

用心做一件事情就这么简单
2011-12-13 00:45
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用zy_space在2011-12-13 02:26:40的发言:

另外再弱弱地问一下,学校封杀P2P(迅雷P2P加速用不了。。。。),还能运用这个程序吗?
嘿嘿,没有呢。我的意思一个对一个。。
没有那么高级呢。。
我的技术还很差呢。。。。。

用心做一件事情就这么简单
2011-12-13 08:11
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用TonyDeng在2011-12-13 15:55:21的发言:

你看了那么多资料,没想到看看TCP/IP原理?通讯功能,实现到哪个层面,由你根据实际情况决定,技术也由此决定,不是人家告诉你如何这般即可通讯就了事的。TCP/IP协定7个层面,有好几种从低到高的通讯模式,看你选中哪一种,就针对那一种来做,这样才有目标。

单机对单机,主要看通讯方式,直接用电缆连可以,用串行线连也可以,用并行线连也可以,用蓝牙、红外等连也可以。你采用的技术,跟现实情况吻合吗?有IP让你用,系统上有TCP/IP底层介面软件,你似乎觉得那技术很简单,问题是某些时候没有这些东西,或者对不上号。要能够在各种情况下均能应付,那才算是高手。这与算法什么的无关,归根结底就是专业原理而已。
这个程序只是写着玩的,无聊的时候想写一下而已,这个程序我也主要写一些控制台的细节,和阻塞的一些问题,了解一下线程而已。根本聊天的代码没有多少,而且我都没有按照书上或视频写的,我只是按照自己思考的逻辑写写,而且我也看许多原理通信。。。
你要这样说的话,只要双方能通过一种协议 一种约定都可以通信啊,用眼神都可以通信啊。。。。。
所以我不明白你为什么要这么说。。。不知道你的意义何在。。。。。
要说技术那里,只要有时间和方法都可以学会。。。我根本没有鄙视哪种技术的意思。
而且你觉得难道你开始编程你就明白编译原理,理解计算机原理。我想你你不会弄懂以后你才开始编程吧。。什么都是由肤浅到深入。。
我对任何技术都没有鄙视的意思

不过在这里还是感谢你的指点。。。希望你以后能给出更好的建议

用心做一件事情就这么简单
2011-12-13 16:13
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用waterstar在2011-12-13 17:45:09的发言:

简单的socket通信,基本上每一本讲网络编程的书都会提到这种例子。

小鱼儿兄,给你提点建议,你在编代码的时候多敲点空格,比如说SOCKET     sClient = accept (sListen, (sockaddr * )&client, &addrlen);不然代码看起来太费劲。
恩,谢谢。
记住了,话说字写的丑的人,他的代码也不好看看。
嘿嘿,我的字超丑

用心做一件事情就这么简单
2011-12-13 20:07
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用TonyDeng在2011-12-13 18:34:53的发言:

通讯无它的,就是一台机的信息能够到达另一台机而已。首先是信息如何传送的问题,有线抑或无线,存粹电子技术线路问题,此为TCP/IP协议的第一层,是实体层。如果工作需要,是嵌入式操控实体的,编程就只能在这个层面上进行。单机与单机、PC与单片机等等,都不指望带有复杂的中介层面软件,多数是直接通讯,比如用串行电缆连接是最原始的。这种现实,不存在什么IP地址的概念,编程时也不过是双方不断监视通讯端口的数据而已,只要做到不遗漏、没错失数据,就能建立稳定的应答关系。实时监视端口数据是通讯,非实时读写磁盘文件也是通讯,手段多种多样。编程的,无非是考虑如何达成目的,建立通讯协议(未必要遵循通行的协议,可以是双方独特的),是采用有保障有状态的通讯模式,还是采用发了就算不管对方是否收到的模式,都有不同的编程方式。了解存在这么些问题是需要考虑的,比什么都重要,拿人家现成的模块,我们没办法知道它到底基于什么、内里做了什么,那是很皮毛的。要想精通编程,这个才是重点,语言只是浮云。

现在万维网上的页面编程,无状态模式就够折磨人,迟早要被替换掉的。
恩,谢谢。。。
我们没办法知道它到底基于什么、内里做了什么,那是很皮毛的。要想精通编程,这个才是重点,语言只是浮云。记住了这句话了


用心做一件事情就这么简单
2011-12-13 20:09
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用TonyDeng在2011-12-13 22:58:32的发言:

学编程和学某门语言是两个不同的概念。立志做程序员,首先是学编程,那是一种思维能力和技能,通用的,任何编程语言都管用。但编程能力不可能凭空,必须通过某门语言表达,此时才是学语言。有些人本身已经是资深程序员,只是刚接触某门语言,那么他就会说学语法很重要,但若是连编程都是初学的,就不能把重点放在语法上了(也就是说以人家的基础那样说是对的,但你自己的基础未必跟人一样,就不要道听途说),那样反而会舍本逐末,被语言的细枝末节吸引,埋头死钻,而忽略了从更高的层次领悟编程之道。比如,链表这样的东西,其实对大多数编程语言来说,都不过是一种现成的模型(即使是现在的C++它也成了标准库提供的东西),初学编程,重点应放在什么问题、什么时候应该运用链表这种数据结构来解决,而不是去学习如何构造链表的增、删、改、排序之类算法,只需要知道链表这个东西该怎么用就可以了,因为那是现成的工具。学编程,重点是如何解决各种各样的现实中最经常碰到的问题,先做熟练技工,能独立操作机床,而不是去学如何设计和制造机床。随着实践经验的积累,慢慢就能领悟到设计之道,那个时候,才有资格理解链表为什么要这样设计,是什么原因促使这种数据结构出现,而平时的经验已经给了你充分的例子,反过来就能更好地应用于实践,不至于张冠李戴套错模型。

C语言正是把细节落到最底层的编程语言,对资深程序员来说,它当然是利器,但不是初学编程者能用的。李小龙挥舞双截棍威力无穷,而且也能解释得通双截棍为什么有那么大的威力,但你也去舞,能打得过谁?须知自己是一个连对方出招有什么征兆都不知道的人,纵使拿着手枪,也只有被抢的份。总之,我还是那句老话,初学编程的人学C,是很危险的事,往往半途而废,因为那些知识,超过大半是根本不知道用在何处的。特别是看到那些说指针能解决啥啥啥问题的,就觉得好笑——如果只有指针能解决问题,别的大多数语言会那么尽力回避它?连C++都要用迭代器概念来取代指针,可想而知指针有多危险,不是给初学者用的。只要初学者一沾这方面,所遇到的巨大困难很容易就把他们吓退,从此不碰编程,他觉得没指望,别想成高手了。

看看那几个问联合体的问题就知道了。联合体,书上是有讲,但这种东西在什么地方会用到?你知道吗?遇到什么问题你会想起这样用可以较方便?你连这种需求都没碰到过,现在来钻它的问题,讲了能理解吗?那算理解吗?这样考试过关了就等于懂编程了吗?多少人在追求深入的书,但最深入的东西其实就是最初就接触过的基础知识,到最后才明白自己原来一直不知道那个用了无数遍的东西居然有如此深奥的内涵。没有实践,看什么秘笈、高手指南,都是多余的。

我曾跟很多人说过,“力学”这门课程的核心概念“力”,其实是最搞不清楚的概念,恰恰现代力学理论体系中,视“力”仅为中介理念,既不是实在,也不需要出现,它的唯一作用,不过是构造某些定律公式。甚至在现代物理学中,连“质量”的概念都没有确切定义。可见最深奥处其实就在最浅显处,这是真理。凡是求深的,实际上是没入门。
先赞一个,其实高度也只有在你写过了很多东西,你才会发现你以前的肤浅。所以初学者没有学习一段,实践一段是不可能站的很高的高度。。对应初学者肯定先把基础学好再说有些东西本身是对的,但只有经历了一些东西之后 我们才会认为是对。我开始学学习链表的时候,没有明白它的用处,没有明白它的原理,而记住书上的模式,一到我要用他的时候,就出现错误。后来hellovfp带我写一个项目的时候,我才发现链表有那么好,要是我用数组写起来很麻烦,而且不容易整理维护自己的代码。也冲他代码里面学到链表原理。。后面就认识到数据结构重要性,以前都是听说很重要,我老师也经常说。我自己那时候学着用c写游戏,写一些小东西。我就纳闷了,根本那些数据结构就不用到,何必要学啊。。。。后来才发现自己太肤浅了。。。数据结构能够是你的程序更加清晰,是你代码简洁。而且有时候能够减少你的算法的难度。。。。但要是我没有和hellovfp写那个程序,我不知道要什么时候认识那点。所以一些东西只有经历才会认识到。只有自己错过才会认识更深刻。。。不然别人怎么说都是废话。

用心做一件事情就这么简单
2011-12-14 00:43
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
回复 20楼 waterstar
很大的同感---

用心做一件事情就这么简单
2011-12-14 10:55
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用hellovfp在2011-12-14 11:42:44的发言:

讨论得很热烈,呵呵。从项目中学到知识是每个程序员学习的必经之路,还有很多的项目等着你呢,不急。

waterstar的建议很中肯,小鱼兄在代码方面还有改进的地方哦,没有注释,没有空行,没有出错处理。。
最基本的WSAStartup是否初始化成功都没有判断,汗一个先。

Tong大侠所说的,要表达的意思,其实就是偶以前说过的,要真正理解TCP/IP,需要从原理上去学习,才会真正掌握网络的东西,努力看《TCP/IP详解》三卷,而不是调用几个API就能学到的。
嗯,主要这个程序是写着玩的。所以就没有注意那么多。
确实。。
什么是技术,技术并不是你调用几个API。会用什么工具===。
而是解决问题的方法,模式。。。。理解原理,理解为什么要这样。。
貌似这个和汝鹏网的一通百通的原理是一样。。。。。。

用心做一件事情就这么简单
2011-12-14 11:59
小鱼儿c
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:852
专家分:1317
注 册:2011-4-1
收藏
得分:0 
以下是引用zy_space在2011-12-14 11:54:10的发言:

受教了,看来我注定有很长的路要走啊。现在也不知道当初报志愿没选择计算机是不是正确的。不过既然我喜欢这个,就努力去学好了。
学计算机,不懂编程,就不叫懂计算机。我觉得这话一点都不假。。。。。

用心做一件事情就这么简单
2011-12-14 11:59
快速回复:小鱼儿--控制台p2p聊天工具(里面)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021453 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved