c# 实现socket 聊天程序 互发消息

一个简易的聊天程序Socket 效果图: 服务端Server代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; 阅读详情

在学期末的时候,老师正好让做一个操作系统课程设计,我选做的是socket通信 。啥也别说了 直入正题

本文就向大家介绍一下 C#下实现套接字(Sockets)编程的一些基本知识,以期能使大家对此有个大致了解。首先,我向大家介绍一下套接字的概念。

套接字基本概念:

   套接字是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将套接字看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个 网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象概念。套接字通常和同一个域中的套接字交换数据(数 据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通信。

   套接字可以根据通信性质分类,这种性质对于用户是可见的。应用程序一般仅在同一类的套接字间进行通信。不过只要底层的通信协议允许,不同类型的套接字间也照样可以通信。套接字有两种不同的类型:流套接字和数据报套接字。

套接字工作原理:

   要通过互联网进行通信,你至少需要一对套接字,其中一个运行于客户机端,我们称之为ClientSocket,另一个运行于服务器端,我们称之为ServerSocket。

   根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认。

   所谓服务器监听,是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。

   所谓客户端请求,是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。

   所谓连接确认,是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述 发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
C#中的套接字编程实例:

   通过向大家简单的介绍套接字的基本概念和实现套接字编程的基本原理,我想大家对套接字编程已有了初步的了解。不过,上面介绍的仅仅是基本概念和原理,要真 正运用还是需要一定的工作的。对基本概念和原理的真正理解的最好方法莫过于自己动手做一个实例,下面我就向大家介绍一个很好的用C#实现套接字编程的实例 ――聊天室程序。

   本程序是基于C/S(服务器/客户端)构架的,程序包含一个服务器端的应用程序和一个客户端的应用程序。首先,在服务器上运行服务器端的应用程序,该程序 一运行就开始服务器监听。然后,在客户机上就可以打开客户端的应用程序。程序打开后可以与服务器端应用程序进行连接,即进行客户端请求。在连接确认后,客 户端用户可以和其他的客户端用户进行聊天。客户端人数没有限制,同时还支持“悄悄话”聊天模式,支持聊天记录。所以这是一个学习套接字编程的相当不错的例 子。而且,程序中为了处理每个客户端的信息还用到了多线程机制。在每个客户端与服务器端连接成功后,它们之间就建立一个线程。这样运用了多线程之后,客户 端之间就不会相互影响,即使其中一个出了错误也不会影响到另一个

Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针对不同的级别编制程序,这些级别几乎囊括了Internet的所有需要--从socket套接字到普通的请求/响应,更重要的是,这种分层是可以扩展的,能够适应Internet不断扩展的需要。
   
   抛开ISO/OSI模型的7层构架,单从TCP/IP模型上的逻辑层面上看,.Net类可以视为包含3个层次:请求/响应层、应用协议层、传输层。WebReqeust和WebResponse 代表了请求/响应层,支持Http、Tcp和Udp的类组成了应用协议层,而Socket类处于传输层。  
   
   传输层位于这个结构的最底层,当其上面的应用协议层和请求/响应层不能满足应用程序的特殊需要时,就需要使用这一层进行Socket套接字编程。
   
   而在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。System.Net 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient、TCPListener 和 UDPClient 类封装有关创建到 Internet 的 TCP 和 UDP 连接的详细信息;NetworkStream类则提供用于网络访问的基础数据流等,常见的许多Internet服务都可以见到Socket的踪影,如Telnet、Http、Email、Echo等,这些服务尽管通讯协议Protocol的定义不同,但是其基础的传输都是采用的Socket。
   
   其实,Socket可以象流Stream一样被视为一个数据通道,这个通道架设在应用程序端(客户端)和远程服务器端之间,而后,数据的读取(接收)和写入(发送)均针对这个通道来进行。
   
   可见,在应用程序端或者服务器端创建了Socket对象之后,就可以使用Send/SentTo方法将数据发送到连接的Socket,或者使用Receive/ReceiveFrom方法接收来自连接Socket的数据;
   
   针对Socket编程,.NET 框架的 Socket 类是 Winsock32 API 提供的套接字服务的托管代码版本。其中为实现网络编程提供了大量的方法,大多数情况下,Socket 类方法只是将数据封送到它们的本机 Win32 副本中并处理任何必要的安全检查。如果你熟悉Winsock API函数,那么用Socket类编写网络程序会非常容易,当然,如果你不曾接触过,也不会太困难,跟随下面的解说,你会发觉使用Socket类开发windows 网络应用程序原来有规可寻,它们在大多数情况下遵循大致相同的步骤。
   
   在使用之前,你需要首先创建Socket对象的实例,这可以通过Socket类的构造方法来实现:
   
   public Socket(AddressFamily addressFamily,SocketType socketType,ProtocolType protocolType);
   
   
   其中,addressFamily 参数指定 Socket 使用的寻址方案,socketType 参数指定 Socket 的类型,protocolType 参数指定 Socket 使用的协议。
   
   下面的示例语句创建一个 Socket,它可用于在基于 TCP/IP 的网络(如 Internet)上通讯。
   
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
   
   
   若要使用 UDP 而不是 TCP,需要更改协议类型,如下面的示例所示:
   
   Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
   
   
   一旦创建 Socket,在客户端,你将可以通过Connect方法连接到指定的服务器,并通过Send/SendTo方法向远程服务器发送数据,而后可以通过Receive/ReceiveFrom从服务端接收数据;而在服务器端,你需要使用Bind方法绑定所指定的接口使Socket与一个本地终结点相联,并通过Listen方法侦听该接口上的请求,当侦听到用户端的连接时,调用Accept完成连接的操作,创建新的Socket以处理传入的连接请求。使用完 Socket 后,记住使用 Shutdown 方法禁用 Socket,并使用 Close 方法关闭 Socket。其间用到的方法/函数有:
   
   Socket.Connect方法:建立到远程设备的连接
   public void Connect(EndPoint remoteEP)(有重载方法)
   Socket.Send 方法:从数据中的指示位置开始将数据发送到连接的 Socket。
   public int Send(byte[], int, SocketFlags);(有重载方法)
   Socket.SendTo 方法 将数据发送到特定终结点。
   public int SendTo

C#编写简单的聊天程序 引言这是一篇基于Socket进行网络编程的入门文章,我对于网络编程的学习并不够深入,这篇文章是对于自己知识的一个巩固,同时希望能为初学的朋友提供一点参考。文章大体分为四个部分:程序的分析设计、C#网络编程基础(篇外篇)、聊天程序实现模式、程序实现程序的分析设计1.明确程序功能如果大家现在已经参加了工作,你的经理或者老板告诉你,“小王,我需要你开发一个聊天程序”。那么接下来该 阅读详情

相关推荐

第二章、C#控制台实现一对一聊天&C#使用socket一对一通信&C#socket类的简单封装&两个控制台聊天

# C#网络通信系列心得体会 第二章、C#控制台实现一对一聊天# C#网络通信系列心得体会前言一、socket简单封装二、使用步骤1.客户端2.服务端三、演示总结 前言 在上一章中,我们只实现了最简单的socket通信,只有单次收发过程,在这一篇文章中,将会通过对Socket简单封装实现控制台的多发多收通信 一、socket简单封装 using System; using System.Text; using System.Net.Sockets; using System.Net; using Sy

jumul的博客 1887

socket.io-client-core:C#中的高性能Socket.IO客户端

用C#编写的socket.io客户端 用于socket.io的高性能C#客户端。 通过和可选配置实现灵活性。 建立在.NET Standard 2.1之上。 安装 PM> Install-Package Socket.Io.Client.Core 特征 完全异步且无阻塞的灵活API 发出事件并接收可选的回调 订阅/取消订阅事件 监视套接字状态对各种套接字高/低级事件做出React 变更日志 1.1.0 从Utf8Json移到System.Text.Json(重大更改) 修复了多个参数的解析,其中某些参数未进行JSON序列化 1.2.0 增加了对事件消息确认的支持 例子 有关更多示例,请参见。 可以在我的其他存储库中找到真实示例-加密比较流媒体API客户端: : 打开/关闭连接 // socket is disposed using new "using" syntax, don

如何处理C#Socket连接的失败

C#中处理Socket连接失败通常涉及几个关键步骤,包括异常处理、重试逻辑以及可能的连接状态检查。通过结合上述建议,你可以更加健壮地处理C#Socket连接的失败情况,并提供更好的用户体验和应用程序稳定性。// 处理空引用异常(例如,当传递了null的IPEndPoint时)// 根据异常类型,你可以决定是重试连接、记录错误还是执行其他操作。// Socket未连接,可能需要重新连接或处理断开连接的情况。// Socket仍然连接,可以发送接收数据。// 尝试建立Socket连接。

java专栏 1697

c# socket

c# socket2009年05月31日 星期日 17:49Microsoft.Net Framework为应用程序访问Internet提供了分层的、可扩展的以及受管辖的网络服务,其名字空间System.Net和System.Net.Sockets包含丰富的类可以开发多种网络应用程序。.Net类采用的分层结构允许应用程序在不同的控制级别上访问网络,开发人员可以根据需要选择针

oyf421102的专栏 1139

2.C#利用SocketIoClientDotNet做Socket客户端跟Java netty-socketio服务端通信

注意SocketIoClientDotNet的版本,刚开始使用的版本是0.9.0版本(第一个版本),不稳定,有时候能连接成功有时候连接不成功。后来升级到了最新的版本这个问题得解决,但是出现了一个新的问题,就是每次连接的时候,会服务端随机建立2~4个连接。接到一个任务,是C#端做Socket的客户端,服务端在用Java,Java那边用的Socket组件是 netty-socketio,在网上找了很多,最后发现用SocketIoClientDotNet可以连通。没有java服务端的代码(请谅解)。

qq_27860623的博客 1002

利用Socket.io实现实时通讯功能

在当今快节奏的社交和工作环境中,实时通讯已经变得至关重要。无论是在线游戏的即时交流,还是团队协作中的实时消息传递,都需要强大的实时通讯功能来支持。而在前端开发中,利用Socket.io这一强大的工具库,实现实时通讯功能变得异常简单

有我更精彩的博客 1217

Android学习——写个小实例

学了不少基础的知识,拼一个完整点的小例子吧!目标:完成一个PC机互发消息聊天程序。 首先要先试通,通讯机制。在多机互联中最常用的是网络,而网络编程中,底层的通讯机制也就是Socket。我们就想试一试用Socket实现双机对联。先试通Socket通讯,PC机当服务器,手机当客户端。通常,我们写PC的Socket程序时,了解到,服务器端是采用Socket监听程序来监听网络的某个端

烈火青春 3402

.NET编程——利用C#实现基于Socket类的聊天室(WinForm)

利用C#实现基于Socket类的聊天室(WinForm)

吾门的博客 5182

Windows Socket聊天程序说明报告

源文件:主程序头文件:winsocket main.h http://blog.csdn.net/huyoo/archive/2004/12/02/201380.aspx对话框资源文件和ID定义:winsocket rc http://blog.csdn.net/huyoo/archive/2004/12/02/201379.aspx主程序主文件:winsocket main.cpp

糯米糊糊的专栏 1万+

C#实现聊天功能

要一对一、一对多的发送信息,实现聊天功能。需要用到C#网络编程的知识,需要用到System.Net、System.Net.Sockets和System.Net.Mail命名空间下的类。还需要知道网络编程的基本概念。 IP:每个电脑都有一个IP地址,在局域网内IP地址是可变的。 TCP协议(传输控制协议):是面向连接的传输层协议,应用程序在使用TCP之前,必须先建立TCP连接,在传输数据完毕后,必须释放已经建立的连接(跟打电话是否类似)。TCP可以保证从一端将数据传送至连接的另一端时,

小小张自由—>张有博 9406

c#Socket实现多人聊天室(附源码)

在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据 套接字之间的连接过程可以分为三个步骤 : (1)服务器监听。 (2)客户端请求。 (3)连接确认 。 c#Socket通讯实现聊天室,支持消息图片发送 c#实现的主要步骤: 1:第一步创建一个开始监听的Socket 2:第二步创建Ip地址和端口号对象 3:第三步让监听的Socket绑定Ip地址跟端口号 4:第四步

qq_43254236的博客 7737

基于C#socket聊天室(附源码)

基于C#-socket聊天室 前言 源代码:https://gitee.com/TL0902/term/blob/master/C%23%E8%81%8A%E5%A4%A9%E5%AE%A4/Tchat.rar 直接下载即可,开发工具是vs2019; 我已经看出来了,大家都喜欢干货,而且是有现成代码的,不知道大家过不过周六日! 最近写了一个小程序,通过socket搭建的一个聊天室,工具是vs2019,语言是C#,这样好做图形化界面; 其实本来想代码丢上来完事,但是有些同学不理解socket,以及使用方法,可

hello_list的博客 7195

C# Socket编程:构建基础聊天应用

C#中,Socket类是网络编程的基础,它封装了底层的网络通信细节,使开发者可以不必关心复杂的网络协议栈实现,而专注于业务逻辑的开发。Socket类可以创建TCP和UDP网络连接,并实现数据的发送接收。命名空间下的Socket类用于在应用程序之间建立基于流的、全双工的、可靠的、面向连接的或者无连接的通信。Socket类提供了大量的方法和属性,用于控制Socket的行为,如ConnectAcceptSendReceive等,用于实现连接、接收连接、发送数据、接收数据等基本操作。

weixin_30661119的博客 861

Unity联网之使用Socket简单实现多人在线聊天室(一)

「前言」 之前在一直在写lua联网等一些知识,虽然lua重要,但C#联网也必不可少是吧。所以呢,本篇博客就主要介绍如何使用Unity和C#实现多人在线聊天室。 工程流程: ● 搭建UI界面 ● 制定消息协议 ● 编写服务器 ● 编写客户端 工作流程: 效果如下: ...

你只管努力,其他的,交给天意! 8752

c# socket-udp通信聊天winform程序

 之前一直想模仿飞秋(飞Q)写一个简易得通信程序练手,熟悉sokect通信。 主要实现功能:简易得聊天窗体,发送消息发送震动,发送文件(可拓展) 话不多说,直接上代码吧。 登陆窗体: 二个用户分别监听不同得端口9000,9001来测试 using System; using System.Collections.Generic; using System.ComponentMod...

waydesmith的博客 1903

基于C#Socket通信聊天程序实战分享

这个聊天程序分为服务器端和客户端两大部分。服务器端要支持多个客户端同时登录连接,并且能处理不同客户端之间一对一或一对多的消息发送。客户端则具备断线重连的贴心功能,确保通信的稳定性。

2508_94252247的博客 571

C#实现Socket聊天程序:服务端多客户端通信

Socket编程是网络通信的基础,它允许程序在不同的计算机或同一台计算机上的不同进程之间进行数据交换。在C#中,System.Net.Sockets命名空间提供了一套丰富的类和方法,用于实现网络通信功能。服务端程序作为网络通信的中心节点,承担着众多核心功能要求。它必须能够持续不断地监听来自客户端的连接请求,并在建立连接后转发数据消息。此外,服务端需要提供高效稳定的数据处理能力,以应对可能的并发连接数据处理请求。在设计上,服务端程序应当易于扩展和维护,能够适应未来可能的功能扩展或升级。

weixin_42351520的博客 1061
下一篇: Linux多进程_消息通信_设计思想交流
ff19880218
博客等级 码龄17年 13粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值