苏州大学论坛

 找回密码
 注册(开放注册)
搜索
查看: 4037|回复: 1
打印 上一主题 下一主题

[软件] 如何实现点对点通信

[复制链接]
跳转到指定楼层
1#
发表于 2006-4-16 11:17:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
QQ聊天大家多不陌生,但是它是如何实现的呢??
实现方式有多种在这里不一一列举出来
软件平台---VC6.0或者VC7.0
一:基本原理
所谓点对点通信就是在各客户端创建一个所谓的 “点”,就是我们常说的SOCKET
通过SOCKET来实现通信,不过这种方式缺点是只能实现简单文本信息的传送
二:实现过程原理
   (一) 服务端创建
   注意很多书上把SERVER 翻译为服务器这是不对的
   创建SOCKET
      创建SOCKADDR结构(在这个结构里存放本机的IP地址等)
   邦定BIND
      将邦定后的SOCKET设置为侦听觉状态 listen
      接受客户端的----连接请求 accept
     当然作为服务端我们不可能只和一个客户端通信,那我们用一个数组来存放接受后的套接字
   SOCKET sockMsg[MAX_CONNECTION_NUM];
      sockMsg =  accept();//参数略
   这是我们就可以利用套接字sockMsg和客户端进行通信了
   上面所说比较笼统,但是大致的框架已经出来了,至于这些函数怎么用,我就不多说,
各位自己去查帮助文档(就是MSDN)
    各位切忌 在进行网络通信之前我们应该代开网络设备 利用函数WSAStart 函数
   (二):客户端
    客户端的创建比较简单
    用过QQ得人,可以下载最新的QQ版本,就会发现在设置里面有这本一项 服务器的选择(具体名称不记得,反正肯定有这项),这个有什么用呢????
    在创建客户端的时候我们不用像服务端那么麻烦
    首先创建一个空SOCKET(就是未邦定且为处于listen状态 )
        然后就是 connect   但是必须有服务端的ip 不然我们就无法进行连接
    完成这些后我们就可以进行和服务段的通信
三 具体实现过程
   (一) 端创建
    首先弄清概念服务端不是服务器,客户端不是客户机
    在每个客户端 我们 既是 服务端也是客户端
    所谓上面介绍的两个端我们必须多得建立,应为我们不可能只是等待别人来主动和我们进行连接或者是
我们主动去和别人连接不接受别人发过来的连接请求
    其次我们要考虑的是程序是顺序运行的,一段代码不可能反复运行(不要在这个问题上和我争论)
比如我们listen 并 accept  或 connect .这些职能执行一次 也就是进行一个 连接,如何来控制让程序时刻
的处于这种状态,如果我们用无线循环来做,那么我们将无法对程序进行其他的操作。怎么办??
    聪明的你一定会想到开线程来做
现在就怎么开线程以及开那些线程
    仔细分析一下我们会发现以下几种状态,必须时刻保持
    listen 并 accept   ,recv,
        做法
    listen和accept必须放在一个线程里面做
    recv单独开革线程
由于代码篇幅较大,在上面我只是简单的说了框架结构和原理。这里不知道可不可以直接插入word文档,如果刻意的话,我们将我的代码共享给大家的。实在是不好意思
    我不想别人问我什么函数该怎么用,因为这些在帮助文档里面有。如果有具体细节不明白 ,偶还是可以说说的
2#
发表于 2006-4-24 17:49:44 | 只看该作者
字体没设好,看起来 吃力。
您需要登录后才可以回帖 登录 | 注册(开放注册)

本版积分规则

手机访问本页请
扫描左边二维码
         本网站声明
本网站所有内容为网友上传,若存在版权问题或是相关责任请联系站长!
站长联系QQ:7123767   myubbs.com
         站长微信:7123767
请扫描右边二维码
www.myubbs.com

小黑屋|手机版|Archiver|苏州大学论坛 ( 琼ICP备10001196号-2 )

GMT+8, 2024-4-20 19:30 , Processed in 0.175131 second(s), 14 queries .

Powered by 高考信息网 X3.3

© 2001-2013 大学排名

快速回复 返回顶部 返回列表