点对点通信聊天程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
点对点通信聊天程序
设计文档:
基于SOCKET的点对点通信聊天
Socket是套接字的意思。在套接字下编程很像打电话的过程,打电话之前先申请一条电话线,假设已接至办公室墙上,则相当于申请一个与其他应用程序通信的输入输出接口,而改程序到底与哪个程序通信,取决于其IP地址。此时,IP就相当于我们要拨打的电话号码,如果对方也申请了一个Socket,我们就可以根据其IP地址跟对方聊天。
1.服务器方
服务器等待用户从主窗口发来的启动接收消息过程如下:
首先建立自己的套接口。
然后建立连接调用listen()函数,开始倾听,再通过accept()等待接收连接。Accept()等待请求队列中的请求,一旦有连接请求来到,就可以建立一个与s有相同属性的套接口。最后关闭套接口。
2.客户方
客户等待用户从主窗口发来的发送命令,一旦接收到发送请求,调用函数初始化socket,窗口函数在收到UNSOCK消息后,判断是由哪个事件引起的,第一次必然是由连接事件引起的,这样就会执行相同的程序。
3.程序流程
在寻求连接的过程中可能会出现阻塞,是由于操作系统本身原因或者通信信道被其他程序长
时间占用等导致函数无法返回。这是被阻塞函数会不断调用系统函数来保持消息循环的正常运行。
Group函数
group函数是对数据集按照某个字段或者表达式进行分组,获得一组组的集合,然后从每组中取出一个
指定字段或者表达式的值,放到单元格中进行扩展,扩展出来的每个单元格都保留了一个指针指向当前的组集,
该组集称为当前组。
因此在附属单元格中,需要对该组集进行操作时,不需要用任何条件和主单元格关联,如果加设了条件,反倒导致报表引擎还对组集中的记录进行遍历检索。
概要设计:
完成的程序应实现如下功能:
1 服务器端服务
2 客户机服务
3点对点的聊天服务。
完成后可看到如下客户页面
只需在对话框里输入信息就可以实现点对点聊天了。
附
程序源代码:
using System;
using System.Drawing;
using System.Collections;
using ponentModel;
using System.Windows.Forms;
using System.Data;
using ;
using .Sockets;
using System.IO;
using System.Threading;
using System.Text;
namespace 点对点聊天
{
///
/// Form1 的摘要说明。
///
public class Form1 : System.Windows.Forms.Form
{
private bel label1;
private System.Windows.Forms.Button button1;
private System.Windows.Forms.TextBox textBox1;
private bel label2;
private System.Windows.Forms.TextBox textBox2;
private bel label3;
private System.Windows.Forms.TextBox textBox3;
private System.Windows.Forms.TextBox textBox4;
private System.Windows.Forms.Button button2;
private bel label4;
private System.Windows.Forms.Button button3;
private System.Windows.Forms.RichTextBox richTextBox1; private System.Windows.Forms.GroupBox groupBox1;
private System.Windows.Forms.GroupBox groupBox2;
private System.Windows.Forms.StatusBar statusBar1;
private System.Windows.Forms.GroupBox groupBox4;
private bel label5;
private System.Windows.Forms.TextBox textBox5;
private System.Windows.Forms.TextBox textBox6;
private bel label6;
private System.Windows.Forms.Button button4;
private System.Windows.Forms.GroupBox groupBox3;
private System.Windows.Forms.RichTextBox richTextBox2;
private System.Windows.Forms.Button button5;
private Thread listenthread;//表示监听的线程
private string msg; //要发送的消息
private Socket socket1; //Socket类用于接收和发送信息
private IPEndPoint lep;
private System.Windows.Forms.GroupBox groupBox5; //请求连接的节点 ///
/// 必需的设计器变量。
///
private ponentModel.Container components = null;
public Form1()
{
//
// Windows 窗体设计器支持所必需的
//
InitializeComponent();
//
// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
//
}
///
/// 清理所有正在使用的资源。
///
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}
#region Windows 窗体设计器生成的代码
///
///
private void InitializeComponent()