首页 > 编程语言 >LYT-C#-Socket——简单的TCP服务端-客户端连接通信

LYT-C#-Socket——简单的TCP服务端-客户端连接通信

时间:2023-04-15 18:15:01浏览次数:43  
标签:LYT Socket C# System socket using 服务端 客户端

https://learn.microsoft.com/zh-cn/dotnet/api/system.net.sockets.tcplistener?view=netframework-4.8.1

TCP编程的服务器端一般步骤是:

  1、创建一个socket,用函数socket()。

  2、设置socket属性。

  3、绑定本机的IP地址、端口等信息到socket上,用函数bind()。

  4、开启监听,用函数listen()。

       5、接收客户端上来的连接,用函数accept()。

       6、通过accept()返回相应客户端的socket建立专用的通信通道。

  7、收发数据,用函数send()和recv(),或者read()和write()。

  8、关闭网络连接。

  9、关闭监听。

 

TCP编程的客户端一般步骤是:

  1、创建一个socket,用函数socket()。

  2、设置socket属性。 

  3、设置要连接的对方的IP地址和端口等属性。

  4、连接服务器,用函数connect()。

  5、收发数据,用函数send()和recv(),或者read()和write()。

  6、关闭网络连接。

 

C# 官方API :System.Net.Sockets--https://docs.microsoft.com/zh-cn/dotnet/api/system.net.sockets?view=netcore-3.1

服务端:socket可绑定各种协议。socket需要协议,需要端口才能传输到b服务器的应用。

accept()会阻塞,
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketServer
{
    class Server3
    {
     //服务器 public static void Main(string[] args) { Socket server_socketListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ips = IPAddress.Parse("127.0.0.1"); IPEndPoint ipNode = new IPEndPoint(ips, 80);//网络端点:为IP地址和端口号 //服务端必须绑定一个端口才能listen(),要不然客户端就不知道该连哪个端口了 server_socketListen.Bind(ipNode); //监听后,如果客户端这时调用connect()发出连接请求,服务器端就会接收到这个请求 //listen函数将socket变为被动类型的,等待客户的连接请求。 server_socketListen.Listen(10); //服务端有两个socket;这里Accept()返回的相当于是客户端的socket,用于和客户端发送(send)和接收(recv)数据 Socket socket_commu = server_socketListen.Accept(); while (true) { byte[] buffer = new byte[1024 * 1024]; //接收数据到缓存buffer int num = socket_commu.Receive(buffer); string str = Encoding.UTF8.GetString(buffer, 0, num); Console.WriteLine("收到客户端数据 : " + str); //发送消息到客户端。 socket_commu.Send(Encoding.UTF8.GetBytes("服务端:" + str)); } } } }
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace SocketClient
{
    class Client3
    {
//客户端 public static void Main(string[] args) { Socket client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ipAdress = IPAddress.Parse("127.0.0.1"); //网络端点:为待请求连接的IP地址和端口号 IPEndPoint ipEndpoint = new IPEndPoint(ipAdress, 80); //connect()向服务端发出连接请求。客户端不需要bind()绑定ip和端口号, //因为系统会自动生成一个随机的地址(具体应该为本机IP+随机端口号) client_socket.Connect(ipEndpoint); while (true) { string rl = Console.ReadLine(); //发送消息到服务端 client_socket.Send(Encoding.UTF8.GetBytes(rl.ToUpper())); byte[] buffer = new byte[1024 * 1024]; //接收服务端消息 int num = client_socket.Receive(buffer); string str = Encoding.UTF8.GetString(buffer, 0, num); Console.WriteLine("收到服务端数据 : " + str); } } } }

 

标签:LYT,Socket,C#,System,socket,using,服务端,客户端
From: https://www.cnblogs.com/ViolinHuang/p/17321554.html

相关文章

  • ELEC3115 ENGINEERING
    ELEC3115–ELECTROMAGNETICENGINEERINGPartBassignment–T12023DueDate:23:59pm,Monday24thApril2020(Week11)AssignmentssubmittedaftertheDueDatewillbepenalizedbya20%marksreduction.CutoffDate:23:59pm,Tuesday25thApril2020(Week11)......
  • 为什么要code review
    1.简介本文将介绍CodeReview的相关内容,包含为什么要CodeReview,以及CodeReview主要review哪些部分的内容,之后讲述如何才能形成一套比较好的CodeReview规则和流程。后续讲述了Codereview中一些可以遵守的比较好的规则,最后讲述了如何才能让Codereview流程跑起来。本文为最......
  • 网页滚动体验,IScroll滚动插件,你安装了类似的滚动页面插件吗
    IScroll是一款基于JavaScript的插件,用于在网页中实现平滑滚动效果。这个插件可以帮助用户创建回到页面顶部和底部的按钮、生成页面导航快照,以及设置滚动时间等功能,从而提升网页的用户体验。IScroll的特点在于,它能够平滑地滚动网页内容,而不会像传统的滚动条那样跳跃。此外,该插......
  • cups+ippserver+cups4j 进行ipp 打印测试
    cups是一个打印标准,ippserver属于一个测试mock的ipp服务(基于软件的),cups4j是cups的一个客户端环境准备具体配置参考github,实际配置来自ippsample的测试配置version:"3"services:ippserver:image:dalongrong/ippserverhostname:ippse......
  • 内存对齐详解 (C++代码)
    内存对齐详解(C++代码)目录内存对齐详解(C++代码)Test1:结构体对齐Test2:时间开销对比我每天都有读一下面经的习惯,从里面抽一些我不太懂的内容使用dfs的思想去探索,感谢有了GPT4,探索之路变得有趣和高效许多。今天这个Topic如下,是腾讯日常实习面经中的内容编译内存相关:C+......
  • AtCoder Beginner Contest 223(D,E,F)
    AtCoderBeginnerContest223(D,E,F)D(拓扑排序)D大意就是有\(n\)个点,\(m\)个关系,其中关系是指\(u\)和\(v\),在排序里面使得\(u\)的位置再\(v\)的位置的前面要求找到一个排序满足上述条件的序列中字典序最小的那一个这个使用拓扑排序,并加上优先队列即可只要找到\(n\)个数,即为......
  • HTML+css
    因为测试需要用到css的内容,所以开始系统学习css和js技术css有id选择器,类选择器,可以组合,也可以单独分布首先是基本的选择器h1{color:rebeccapurple;}/*类样式class=*/.f20{font-size:18px;}/*id样式id=,notcopy*/#p4{font-size:30px;......
  • 利用AntDesign中a-tree和checkbox构造组织单位人员树选择组件
    业务效果图核心代码<template><divclass="select-container"><a-modalv-model:visible="visible"@ok="handleOk"@cancel="handleCancel"width="1500px"><template#title>......
  • Excel VBA语句集
    (第1辑)定制模块行为(1)OptionExplicit'强制对模块内所有变量进行声明OptionPrivateModule'标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示OptionCompareText'字符串不区分大小写OptionBase1'指定数组的第一个下标为1(2)OnErrorResumeNext'忽略......
  • 11 Geometry(Curves and Surface)
    关键点BezierCurvesBezierSurfaces1.BezierCurves贝塞尔曲线用一系列的控制点定义一个曲线,并且定义了一系列控制。如下定义起止点为p0、p3,且定义起始切线,则绘制出一条曲线。1.1deCasteljauAlogrithmThreeinputpoints定义一个时间t,然后取b0b1与b1b2的相应比......