C#中Socket多线程编程实例

时间:2025-07-08

非常有用的实例

//客户端form

using System;

using System.Collections.Generic;

using http://ponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace TCPClient

{

public partial class ClientForm : Form

{

private P2PClient ClientObj = new P2PClient();// 客户端对象

public ClientForm()

{

InitializeComponent();

}

非常有用的实例

EventArgs e)

{ bntSend.Enabled = false;//没有连接不允许发送数据

// this.AcceptButton = bntSend;

button1.Enabled = false;//没有连接,不能断开 }

private

EventArgs e)

{

string nickName = tbName.Text;

string ip = tbIP.Text;

string port = tbPort.Text;

if (string.IsNullOrEmpty(nickName) || void btnConnect_Click(object sender, string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(port)) {

MessageBox.Show("请将昵称,ip填写完整");

return;

}

try

非常有用的实例

ClientObj.SendConnection(ip,

Convert.ToInt32(port));//连接

//订阅事件的处理方法

ClientObj.receiveEvent += new P2PClient.receiveDelegate(ClientObj_receiveEvent);

ClientObj.Send(tbName.Text+"***"+"登陆成功!***"+ DateTime.Now.ToString());

bntSend.Enabled = true;

btnConnect.Enabled = false;

button1.Enabled = true;//连接后才能断开连接 }

catch(Exception ex)

{

MessageBox.Show("连接时出错:"+ex.Message);

return;

}

}

非常有用的实例

void ClientObj_receiveEvent(string receiveData) {

try

{

if (this.InvokeRequired)//指示是否需要在这个线程上调用方法

{ //当把消息传递给控件线程时重复调用该方法;就会调用else

P2PClient.receiveDelegate update = new P2PClient.receiveDelegate(ClientObj_receiveEvent);

this.Invoke(update, new object[] { receiveData });//将消息发送给控件线程处理

}

else

{

lbMessage.Items.Add(receiveData);//添加数据

}

}catch(Exception ex){

MessageBox.Show("接收数据错误:"+ex.Message);

return;

非常有用的实例

}

}

private void bntSend_Click(object sender, EventArgs e)

{

try

{

if(string.IsNullOrEmpty(tbMessage.Text)){ return;

}

ClientObj.Send(tbName.Text+"说: "+tbMessage.Text +" "+ DateTime.Now .ToString());//发送信息

tbMessage.Clear();//清除原来的文本

}catch(Exception ex){

MessageBox.Show("发送数据出错"+ex.Message);

return;

非常有用的实例

}

private void button1_Click(object sender, EventArgs e)

{

if (MessageBox.Show("确定要断开连接吗", "提示", MessageBoxButtons.OKCancel) == DialogResult.OK) {

ClientObj.Send(this.tbName.Text+" 下线了 " +DateTime.Now.ToString());

Application.Exit();//如果确定则跳出 //ClientObj.tcpClientObj.Close();//关闭连接

//ClientObj.CloseForm();

//this.Close();

非常有用的实例

}

}

}

//客户端类

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

using http://;

using http://.Sockets;

using System.Windows.Forms;

using System.IO;

namespace TCPClient

{

class P2PClient

{

非常有用的实例

public TcpClient tcpClientObj;//收发数据

private Thread receiveThread;//接收数据的线程

public delegate void receiveDelegate(string receiveData);//处理接收数据事件的方法类型

public event receiveDelegate receiveEvent;//接收数据的事件

//通过ip地址和端口号发送连接

public void SendConnection(string ip, int port) {

IPAddress ipAddr = IPAddress.Parse(ip);//转为ip地址后在连接会加快速度

tcpClientObj = new TcpClient();//连接客户端 tcpClientObj.Connect(ipAddr,port);//连接服务器 receiveThread =new Thread(Receiver);//启动接收线程

receiveThread.Start();

}

public void Send(string message)//发送消息 {

if (tcpClientObj == null) {

非常有用的实例

return;

}

NetworkStream

this.tcpClientObj.GetStream();//得到网络流

StreamWriter sw = new StreamWriter(ns); sw.WriteLine(message);//发送消息

sw.Flush();//将所有的缓冲数据写入基础数据流

ns.Flush();

}

private void Receiver() { //接收数据对应的线程(接收到数据以后触发事件)

while (true) {//一直接受

NetworkStream

this.tcpClientObj.GetStream();

StreamReader sr = new StreamReader(ns); string receivedata = sr.ReadLine(); receiveEvent(receivedata);//触发事件 }

}

ns = ns =

非常有用的实例

public void CloseForm()// 关闭线程

{

receiveThread.Abort();

}

}

}

服务器端类

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using http://.Sockets;

using System.Threading;

using http://;

using System.Windows.Forms;

using System.IO;

namespace TCPServer

非常 …… 此处隐藏:4249字,全部文档内容请下载后查看。喜欢就下载吧 ……

C#中Socket多线程编程实例.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    Copyright © 2023-2025 学科文库 版权所有
    本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
    客服QQ:370150219 邮箱:370150219@qq.com
    苏ICP备16052595号-5

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219