.Net中的socket编程—聊天程序

套接字编程实例 UDP TCP通信 C# .net C# .net 套接字编程实例 UDP TCP通信                    首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来            连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。客户端在需要的时刻发出向服务端的连接请求 阅读详情
socket是套接字的英文名称,主要是用于网络编程,在以前vb6时要想使用socket进行程序开发最麻烦的是要自己声明socket动态库中的相关函数,而这些函数的参数多不说,还是用c语言编写的,要让它门在vb中运行最头痛的就是要进行函数参数的转换。经常是为了测试一个参数的转换是否正确而花上大半天的功夫。

  不过现在不同了有了.net,它的System.Net.Sockets 命名空间包含 Windows 套接字接口的托管实现。而System.Net 命名空间中的所有其他网络访问类都建立在该套接字实现之上,有就是说使用System.Net.Sockets和System.Net 命名空间中类可以完成通过socket动态库中的几乎全部功能,但是又避免了参数转化的麻烦。(.NET Framework的 Socket 类是 Winsock32 API 提供的套接字服务的托管代码版本。大多数情况下,Socket 类方法只是将数据封送到它们的本机 Win32 副本中并处理任何必要的安全检查。)

  Socket 类支持两种基本模式:同步和异步。在同步模式中,对执行网络操作的函数(如 Send 和 Receive)的调用一直等到操作完成后才将控制返回给调用程序。在异步模式中,这些调用立即返回。本文将讨论同步模式,因为同步模式是基础。

  程序说明:(本文中的程-序需要用户编写两个实例才可以完成。)

  发送方:在使用套接字通信之前,必须使用协议和网络地址信息初始化套接字。Socket 类的构造函数具有指定套接字用来建立连接的地址族、套接字类型和协议类型的参数。然后指定要发送到目标机器的ip地址和端口号。在将要发送数据发送的字节数组传递到 Socket 类的数据发送方法Send 和 SendTo之一本文使用send方法。最后关闭socket终止发送。

'发送端代码
Public Class Form1
    Inherits System.Windows.Forms.Form
Private Sub Button1_Click(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles Button1.Click
        Dim bytes(1024) As Byte'声明字节数组
        Dim sender1 As New System.Net.Sockets.Socket
	  (Net.Sockets.AddressFamily.InterNetwork,
	  Net.Sockets.SocketType.Stream,
	  Net.Sockets.ProtocolType.Tcp)
	  '初始化socket
        Dim msg As Byte() =
	  System.Text.Encoding.ASCII.GetBytes(TextBox1.Text)
	    '对发送的数据进行编码
'***************************
'指定ip和端口
        Dim ipHostInfo As System.Net.IPHostEntry =
	  System.Net.Dns.Resolve("d")
        Dim ipAddress As System.Net.IPAddress =
	  ipHostInfo.AddressList(0)
        Dim ipe As New System.Net.IPEndPoint(ipAddress, 11000)
'**********************
        sender1.Connect(ipe)'建立连接
        Dim bytesSent As Integer = sender1.Send(msg)'发送数据
'(((((((((
'关闭socket
        sender1.Shutdown(Net.Sockets.SocketShutdown.Both)
        sender1.Close()
')))))))
End Sub
End Class




  接收端:和发送端一样先需要初始化套接字,指定接收方ip和端口号(必须与发送方相同),通过Listen方法监听指定的接收方ip和端口号,申请连接,使用Receive接收数据,在将数据传给字节数组,最后关闭socket。

接收端
Public Class Form1
    Inherits System.Windows.Forms.Form
    Dim listener As New System.Net.Sockets.Socket
      (Net.Sockets.AddressFamily.InterNetwork,
      Net.Sockets.SocketType.Stream,
      Net.Sockets.ProtocolType.Tcp)
      '初始socket
Private Sub Form1_Load(ByVal sender As System.Object,
  ByVal e As System.EventArgs) Handles MyBase.Load
'指定ip和端口
        Dim ipHostInfo As System.Net.IPHostEntry =
	  System.Net.Dns.Resolve(System.Net.Dns.GetHostName())
        Dim ipAddress As System.Net.IPAddress =
	  ipHostInfo.AddressList(0)
        Dim localEndPoint As New System.Net.IPEndPoint(ipAddress, 11000)
        listener.Bind(localEndPoint)
        listener.Listen(10)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object,
        ByVal e As System.EventArgs) Handles Button1.Click
        Dim bytes() As Byte = New [Byte](1024) {}
        Dim handler As System.Net.Sockets.Socket =
	  listener.Accept()'建立连接请求
        Dim data As String = Nothing
        bytes = New Byte(1024) {}
        Dim bytesRec As Integer = handler.Receive(bytes)'接收数据
        data += System.Text.Encoding.ASCII.GetString(bytes, 0, bytesRec)
        TextBox1.Text = data
        Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(data)
        handler.Shutdown(Net.Sockets.SocketShutdown.Both)
        handler.Close()
    End Sub
End Class




  说明:本程序未进行异常处理,所以不可以连续点"接收"键,其原因是让读者快速掌握.net中的socket编程基础(如要进行异常处理,请加入try块,详情见msdn)。由于本代码的中数据编码使用的是英文编码,所以不支持中文字体(通过对编码的修改可以发送中文,见msdn)。本文的目的不是教各位编写聊天程序,所以在看本文时请从socket方面进行思考。本程序在局域网和internet中测试时都通过了,如果是想在internet中使用本程序,需要将文中的接收和发送方的Dim ipe As New System.Net.IPEndPoint(ipAddress, 11000)语句中的ipaddress修改为真的ip地址并分别将发送和接收安装于不同ip地址的计算机上。

  本程序开发环境vb.net,os是windows 2000。不过在微软最新的vs.net2003中也可以编写和编译本程序。
C Socket编程 5 使用TCP Socket 阅读详情

相关推荐

C#.NET客户端/服务器聊天程序源码解析与实践

客户端/服务器模型是一种广泛应用于分布式计算环境的体系结构。在这种架构中,客户端(Client)与服务器(Server)承担不同的角色,通过网络进行通信。客户端是请求服务的用户程序,它通过发送请求到服务器来获取资源或服务。服务器则是响应这些请求,提供服务或数据的后台程序。工作原理上,客户端通过网络向服务器发送一个服务请求,服务器接收请求并处理,然后将结果返回给客户端。这个过程可以是同步的,即客户端在发送请求后会等待服务器响应;也可以是异步的,客户端继续执行其它操作,等到服务器响应时再进行处理。

weixin_31938351的博客 470

Net中的socket编程—聊天程序

socket是套接字的英文名称,主要是用于网络编程,在以前vb6时要想使用socket进行程序开发最麻烦的是要自己声明socket动态库中的相关函数,而这些函数的参数多不说,还是用c语言编写的,要让它门在vb中运行最头痛的就是要进行函数参数的转换。经常是为了测试一个参数的转换是否正确而花上大半天的功夫。   不过现在不同了有了.net,它的System.Net.Sockets 命名空间包含 W

3593

C#实现TCP协议聊天程序的完整网络通信项目

System.Net.Sockets 命名空间中包含了多个核心类,它们是构建网络通信的基础。其中,SocketTcpClient和是最常用的三个类,各自适用于不同的场景。Socket提供最底层控制,适用于复杂网络编程。TcpClient和提供简化接口,适用于快速开发。通过本章的学习,我们掌握了Socket编程中客户端与服务端的连接机制、生命周期管理、异常检测以及基础连接测试的方法。下一章将深入讲解如何使用BindListen和Accept。

weixin_29363791的博客 780

实例146聊天程序

System.Net.Sockets 命名空间 https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets?view=netcore-3.1 .NET类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要一一从Socket套接字到普通的请求/响应。.NET类可以视为包含3个层次:请求/响应层、应用协议层和传输层。WebReqeust和We..

复行数十步 344

C# socket实现简单的聊天功能

C# socket实现简单的聊天功能 C# socket实现简单的聊天功能 C# socket实现简单的聊天功能

JAVA审批流程,一个简单表结构设计方案By OU

一、表结构设计1.流程表(process)用于存储审批流程的基本信息。字段名类型描述idBIGINT主键,流程IDname流程名称TEXT流程描述DATETIME创建时间DATETIME更新时间statusTINYINT(1)流程状态(0: 停用, 1: 启用)2.节点表(process_node)用于管理流程中的每个审批节点。字段名类型描述idBIGINT主键,节点IDprocess_idBIGINT流程ID,外键关联process.id。

1901

实例解析SOCKET编程模型(-)

Socket(套接字)是一种独立于协议的网络编程接口,在OSI模型中,主要集中于会话层和传输层。Socket 实际上代表的是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均可以用统一的前端

1109

ArcGIS License Server点击启动没反应,许可管理器无法启动怎么办

4 当我们再打开ArcGIS License Server Administrator的时候。3 在【服务】中找到【ArcGIS License Manager】双击。无法启动ArcGIS License Server的情况。在使用ArcGIS的过程中,我们经常会遇到。专注GIS领域知识分享,交流行业软件技巧。欢迎关注,不定期分享GIS各种问题和技巧。1 右击我的电脑——【管理】服务状态——启动,确定即可。启动类型选择——自动。

GIS蒲公英的博客 2万+

实例解析SOCKET编程模型

      Socket(套接字)是一种独立于协议的网络编程接口,在OSI模型中,主要集中于会话层和传输层。Socket 实际上代表的是两个实体之间进行通信的有效端点。通过socket可以获得源IP地址和源端口、终点IP地址和终点端口。用户可以将多个socket连入同一个端口,以便对于单个端口可以有多个连接。通过socket客户/服务器编程可以创建一个能被许多人使用的分布式程序,并且所有客户均

835

从GWAS到单细胞:利用seismic包精准定位疾病相关的关键细胞亚群与驱动基因

本文详细介绍了如何利用seismic包将GWAS与单细胞测序数据结合,精准定位疾病相关的核心细胞亚群与驱动基因。通过创新的统计算法和实战案例,帮助研究者从遗传汇总数据中挖掘关键生物学机制,提升疾病研究的精准度和效率。

weixin_29215815的博客 441

20 CVPR Learning 3D Semantic Scene Graphs From 3D Indoor Reconstructions 学习笔记

3RScan是大规模真实世界的室内场景,特点是对478个自然改变的室内环境在不同的时间帧进行了1482 RGB-D scans,每一个scene都包括了一些位置被改变的物体。它和ScanNet数据集的区别主要在于ScanNet中的每一个采样环境都不相同,但是3RScan中存在采样环境相同但物体的位置不同的场景。Scene Graph Annotations 则是在3RScan的基础上给物体加入了场景图需要的关系、物体特征和类别标注,同时对3RScan进行了扩展,以此形成了场景图数据。

weixin_43508459的博客 1835

网络编程技术

网络编程技术 1. 掌握System.Net命名空间下主要类的使用 Dns类 Dns类是一个静态类,它从Internet域名系统(DNS)检索关于特定主机的信息。在IPHostEntry类的实例中返回来自DNS查询的主机信息。如果指定的主机在DNS数据库中有多个入口,则IPHostEntry包含多个IP地址和别名。 IPAddress类 IPAddress类包含计算机在IP网络上的地址,它主...

小程博客 515

Simulink+Simscape多体仿真:六自由度Stewart平台动力学建模全流程

本文详细介绍了使用Simulink和Simscape Multibody进行六自由度Stewart平台动力学建模的全流程,涵盖从CAD模型导入、运动学逆解计算到实时控制系统的设计。通过MATLAB/Simulink与Simscape的协同工作,实现高保真度的并联机器人仿真,适用于飞行模拟器、精密加工等高精度领域。

r2s3t4的博客 486

C#套接字编程实例UDP/TCP通信

C# .net2.0 套接字编程实例 UDP TCP通信 首先从原理上解释一下采用Socket接口的网络通讯,这里以最常用的C/S模式作为范例,首先,服务端有一个进程(或多个进程)在指定的端口等待客户来 连接,服务程序等待客户的连接信息,一旦连接上之后,就可以按设计的数据交换方法和格式进行数据传输。客户端在需要的时刻发出向服务端的连接请求。这里为 了便于理解,提到了一些调用及...

weixin_33852020的博客 384

具身大小脑全栈全网独家复现|LLM链式推理+边缘VLA感知+毫秒级运动小脑、优化人形步态僵硬运动滞后、打通思考-行走-操作全链路适配居家工业多场景落地

高层决策大脑(异步10Hz,GPU算力):轻量化机器人微调LLM+RhinoVLA边缘视觉大模型,负责自然语言链式工序拆解、全局环境语义感知、目标物体筛选、跨机器人动作适配,输出粗粒度运动目标,不介入底层伺服计算;依托View Registry实现异构机器人动作对齐,适配多形态机器人切换;中层调度小脑(硬实时1kHz,CPU算力)

qq_36130719的博客 255

基于GA-BP遗传算法优化神经网络的多输入多输出数据预测-Python代码实现

多输入多输出的GA-BP神经网络

2301_80449389的博客 2308

C# 聊天程序

C#聊天程序 *=====================================================================  文件:      Wintalk.cs   摘要:   演示如何使用 .Net创建聊天程序=====================================================================*/usi

Air的博客 185

Transformer实战(38)——视觉Transformer (Vision Transformer, ViT)

Transformer 在自然语言处理 (NLP) 领域取得了显著成就,在许多不同的任务中都表现出色。在本节中,我们将探索视觉 Transformer (Vision Transformer, ViT) 模型。正如 NLP 领域创建了多种模型一样,视觉领域也开发了多种模型,每种模型都为计算机视觉提供了新的视角。通过本节,将学习如何使用 ViT 等模型进行计算机视觉任务,了解基于 Transformer 的预训练计算机视觉模型的工作原理,以及如何针对特定任务进行微调。

盼小辉丶的博客 2872

GoWeb——Socket编程

其中,net参数是网络协议的名字,addr参数是IP地址或域名,而端口号以“:”的形式跟随在P地址或域名的后面,端口号可选。如果连接成功,则返回连接对象,否则返回error。除Dial()函数外,还有一个名为DialTCP()的函数用来建立TCP连接。其中,network参数可以是tcp、tcp4或tcp6;laddr为本地地址,通常为nil;raddr为目的地址,为TCPAddr类型的指针。该函数返回一个*TCPConn对象,可通过Read()和Write()方法传递数据。

吴声子夜歌的博客 1370

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

黑马程序员-java网络编程

一、网络编程概述: 1、网络模型: OSI参考mo

Fivedays的专栏 709

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

当IE向服务器发送数据的时候,这些数据是IE从哪里取得的呢?To block, or not to block? That is the question.

在ASP.NET 中关闭页面(没有关闭提示) 在www.chenshen.com 上用socket作web服务器,IE做客户端来作聊天室的程序。下面是截获的Get命令: GET / HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, applicat

我要去桂林-田春峰 2196

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

用Socket做简单聊天程序(VB.net)

有位网友发贴问我一个聊天的问题,不好拒绝;也看到最近VB.net版问这个的人很多,就写了一个放在这里。本例只适合初学用Socket编程的人,因而力求简单,让老鸟见笑了J另本示例用的是vs20051、服务端Imports System.NetImports System.Net.SocketsImports System.ThreadingImports Syst

c#专栏 1万+

C# Socket编程(5)使用TCP Socket

  TCP 协议(Transmission Control Protocol,传输控制协议)是TCP/IP体系中面向连接(connection oriented)的传输层(transport layer),TCP协议能够检测和恢复IP层提供的主机到主机的信道中可能发生的报文丢失、重复以及其他错误。由于TCP协议是一种面向连接协议:在使用它进行通信之前,两个应用程序之间首先要建立一个TCP连接。TC...

weixin_30765319的博客 112

黑马程序员-lesson9 UDP、TCP、HTTP

帧格式简单图示: 协议类型|源IP|目标IP|源端口|目标端口|帧序号|帧数据 Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉对应的IP和Prot。 Socket数据发送、接收过程。 java.net包。 DatagramSock

ccxztian的专栏 477

HENU 2024年C#网络应用编程实战技巧与核心考点解析

本文深入解析HENU 2024年C#网络应用编程的核心考点与实战技巧,涵盖TCP/UDP编程、多线程处理、ASP.NET开发等关键内容。通过代码示例和项目实战,帮助开发者掌握C#网络编程的精髓,提升网络应用开发效率与性能优化能力。

pytorchlight8的博客 838
上一篇: .多线程的概念
下一篇: 打开文件夹并且选中指定的文件的通用函数实现
Channels_net
博客等级 码龄22年 12粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值