热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网络通讯C#(TCP)简单实现通讯

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Net;
using System.Net.Sockets;//套接字
using System.Threading;//线程
namespace ConsoleApp1
{
///


/// 服务器端
///

///


class Sever
{
private Socket _SockSever; //服务器监听套接字
private bool _IsListenCOntect=true; // 是否监听服务器(方便退出)

//构造函数
public Sever()
{
//定义网络终结点(封装IP与端口)
IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.20.102"),8585);//地址与端口号 ip 127.0.0.1 代表本机
//实例化 定义SockSever套接字 TCP是面向流来传输的所以用Stream
_SockSever = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//服务器端绑定地址
_SockSever.Bind(endPoint);
//开始监听
_SockSever.Listen(10);//10 表示“监听队列”最大长度 等于最多链接服务器的数量 起限制的作用
Console.WriteLine("服务器端已启动");

//检测客户端是否连接
try
{
while (_IsListenContect)
{
//Accept 方法 : 接受客户端的连接方法
//这个方法会阻断当前的线程
Socket sockMsgSever = _SockSever.Accept();
Console.WriteLine("有一个客户端连接");

//开启后台线程,进行客户端的会话
Thread thClientMsg = new Thread(ClientMsg);

thClientMsg.IsBackground = true; //定义成后台线程
thClientMsg.Name = "thClientMsg";
thClientMsg.Start(sockMsgSever);
}
}
catch (Exception)
{


}
}

public void ClientMsg(object sockMsg)
{
Socket socketMsg= sockMsg as Socket; //通讯Socket
while (true)
{
//准备一个“数据缓存”
byte[] msgArray = new byte[1024 * 1024];//1M空间
//接收客户端发来的数据,返回数据真实的长度。
int trueClientMsgLength= socketMsg.Receive(msgArray);
//byte数组转String
string strMsg= Encoding.UTF8.GetString(msgArray, 0, trueClientMsgLength);
//显示消息
Console.WriteLine(strMsg);
}
}


static void Main(string[] args)
{
Sever severObj = new Sever();
}
}
}

 

 

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Net;
using System.Net.Sockets;
///


/// 客户端
///

namespace ConsoleApp2
{
class Client
{
private Socket _SockClient; //客户端的通讯套接字
private IPEndPoint secerEndPoint; //连接到服务器IP与端口

public Client()
{
//封装服务器的IP与端口
secerEndPoint = new IPEndPoint(IPAddress.Parse("192.168.20.102"), 8585);
//建立客户端Sockt
_SockClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

try
{
_SockClient.Connect(secerEndPoint);
}
catch (Exception)
{


}
Console.WriteLine("连接服务器成功");

}
public void SendMsg()
{
while (true)
{
//输入信息
string strMsg= Console.ReadLine();
//退出
if (strMsg=="退出")
{
break;
}
//字节转换
byte[] byteArray = Encoding.UTF8.GetBytes(strMsg);
//发送数据
_SockClient.Send(byteArray);

Console.WriteLine("我:"+strMsg);

}
//禁用链接
_SockClient.Shutdown(SocketShutdown.Both);
//关闭连接
_SockClient.Close();
}

static void Main(string[] args)
{
Client clientObj = new Client();

clientObj.SendMsg();
}

}
}

 

网络通讯C#(TCP)简单实现通讯



推荐阅读
  • 蒜头君的倒水问题(矩阵快速幂优化)
    蒜头君将两杯热水分别倒入两个杯子中,每杯水的初始量分别为a毫升和b毫升。为了使水冷却,蒜头君采用了一种特殊的方式,即每次将第一杯中的x%的水倒入第二杯,同时将第二杯中的y%的水倒入第一杯。这种操作会重复进行k次,最终求出两杯水中各自的水量。 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • NX二次开发:UFUN点收集器UF_UI_select_point_collection详解
    本文介绍了如何在NX中使用UFUN库进行点收集器的二次开发,包括必要的头文件包含、初始化和选择点集合的具体实现。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • 如何解决TS1219:实验性装饰器功能可能在未来版本中更改的问题
    本文介绍了两种方法来解决TS1219错误:通过VSCode设置启用实验性装饰器,或在项目根目录下创建配置文件(jsconfig.json或tsconfig.json)。 ... [详细]
  • 第七卷《英才》强调,即使有良药,若不对症,效果也不如低等药物;即使有贤才,若不适用,效果也不如普通人。文中通过多个比喻,阐述了人才使用的重要性,指出合适的人才在适当的时间和场合才能发挥最大效用。 ... [详细]
  • Manacher算法详解:寻找最长回文子串
    本文将详细介绍Manacher算法,该算法用于高效地找到字符串中的最长回文子串。通过在字符间插入特殊符号,Manacher算法能够同时处理奇数和偶数长度的回文子串问题。 ... [详细]
  • 本文介绍了多种开源数据库及其核心数据结构和算法,包括MySQL的B+树、MVCC和WAL,MongoDB的tokuDB和cola,boltDB的追加仅树和mmap,levelDB的LSM树,以及内存缓存中的一致性哈希。 ... [详细]
  • Python多线程详解与示例
    本文介绍了Python中的多线程编程,包括僵尸进程和孤儿进程的概念,并提供了具体的代码示例。同时,详细解释了0号进程和1号进程在系统中的作用。 ... [详细]
  • 本文详细介绍了Linux系统中用于管理IPC(Inter-Process Communication)资源的两个重要命令:ipcs和ipcrm。通过这些命令,用户可以查看和删除系统中的消息队列、共享内存和信号量。 ... [详细]
  • A*算法在AI路径规划中的应用
    路径规划算法用于在地图上找到从起点到终点的最佳路径,特别是在存在障碍物的情况下。A*算法是一种高效且广泛使用的路径规划算法,适用于静态和动态环境。 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • MySQL 数据库连接方法
    本文介绍了如何使用 MySQL 命令行工具连接到指定的数据库。 ... [详细]
  • 如何解决8080端口被占用问题
    本文介绍了如何通过命令行和任务管理器查找并终止占用8080端口的进程,以确保该端口能够正常使用。 ... [详细]
  • Excel 数据分析基础
    Excel 是数据分析中最基本且强大的工具之一,具备多种实用功能和操作方法。本文将简要介绍 Excel 的不同版本及其兼容性问题,并探讨在处理大数据时的替代方案。 ... [详细]
author-avatar
青岛淘宝摄影
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有