Socket网络编程练习(C#)

本文详细介绍了如何使用Socket编程在两个Windows应用程序之间建立通信,涉及网络编程基础知识,如IP地址、端口、Socket的角色以及TCP/IP协议。通过.NETFramework的Winform项目,展示了服务器端和客户端的创建,包括监听、连接、发送和接收信息的步骤,还涵盖了文件传输和窗口抖动功能的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Socket编程:两个窗口通信

本文章代码来自b站视频:【.Net零基础入门 (老赵主讲)-哔哩哔哩】 https://b23.tv/YI5VWaj

原视频发布者为传智播客,本人根据自己的学习进度对代码做了少许优化

一、网络编程前置知识

1.1 什么是网络编程

  • 网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。

    网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分你都要接触。

1.2 Socket简介

  • 用视频的话讲解就是宿管大妈

    如图男生要找一个女生,首先要知道宿舍楼位置(服务器ip地址),但是知道ip地址并不能直接找到要找的女生,还需要知道女生的名字(应用的端口号),这两样东西都是被宿管大妈(Socket)管理的

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

    宿管大妈主要是根据男生提供的女生姓名找到女生,负责的是监听。

    通信的Socket是应用自身携带的,可以理解男生和女生的通信是用的自己的嘴说话和耳朵进行信息交流,在程序中我们要为客户端和服务器分别绑定一个Socket负责通信

1.3 协议

  • 协议的本质就是约定,语言本身就有约定的存在,比如数字“2”代表数量为二的含义,数字“1”代表数量为一的含义。我们更改一下,让“2”这个字符代表数量一,让“1”代表数量二,如果大家都认可这个约定,我们以后数数就是“213456789…”,对于计算机来说,并不能直接识别字符本身的含义,我们通常在数据的指定位置上加标志位来解决这个问题。比如“0”代表文本信息,“1”代表文件数据,“2”代表动作信息。而网络协议TCP/IP要比我们在本程序中规定的要复杂的多,但是基本原理是一致的。想要深入学习TCP/IP,请参照《计算机网络》这门课程。

二、开始项目

2.1 程序流程图

  • 原版流程图是简化的

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

  • 自己绘制的流程图
    在这里插入图片描述

2.2 新建项目

  • 新建winform(.NET Framework)项目

    本人使用的是Visual Studio2022版本,不同版本的Visual Studio操作有细微的区别,没有相关依赖的需要安装。安装方式:工具->获取工具和功能->visual studio installer->选择.NET桌面开发->点击安装。其他版本的请自行百度安装方法或者更换版本。

    第一个项目是server端的编写

  • server端页面布局

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

2.3 第一步:初始化服务器

  • 点击监听按钮,开始监听
    /// <summary>
    /// 开始监听按钮点击事件,开始监听:
    /// 1.创建监听Socket对象
    /// 2.绑定服务器ip和端口号
    /// 3.开启监听
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    private void startListenBtn_Click(object sender, EventArgs e)
    {
    
    	try { 
    		//点击开始监听,服务器创建负责监听IP地址与端口号的Socket
    		Socket socketListener=new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    	   
    		IPAddress ip=IPAddress.Any;
    
    		//创建端口号对象,IPAddress.Any表示服务器接收任意ip地址的访问
    		IPEndPoint endPoint = new IPEndPoint(ip, Convert.ToInt32(portBox.Text));
    		socketListener.Bind(endPoint);
    
    		ShowMsg("监听成功");
    
    		//设置时间点内最大访问数
    		socketListener.Listen(10);
    
    		//由于监听是个死循环,创建监听函数,需要开启新线程调用它,避免主线程卡死
    		Thread thred=new Thread(Listen);
    		thred.IsBackground = true;
    		thred.Start(socketListen
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值