C#实现套接字发送接收数据

本文实例为大家分享了C#实现套接字发送接收数据的具体代码,供大家参考,具体内容如下

服务端

namespace TestServer
{
    public partial class ServerForm : Form
    {
        Socket socketSend;
        // 将远程连接的客户端的IP地址和socket存入集合
        Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
        public ServerForm()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                // 当点击开始监听后,在服务器创建一个负责监听IP地址和端口号的socket
                Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                IPAddress ip = IPAddress.Any;//;IPAddress.Parse(txtServer.Text)
                IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
                // 监听
                socketWatch.Bind(point);
                ShowMsg("监听成功");
                socketWatch.Listen(10);
                Thread th = new Thread(Listen);
                th.IsBackground = true;
                th.Start(socketWatch);
            }
            catch { }
        }

        void Listen(object o)
        {
            // 等待客户端连接 并创建一个负责通信的Socket
            Socket socketWatch = o as Socket;
            while (true)
            {
                socketSend = socketWatch.Accept();
                dicSocket.Add(socketSend.RemoteEndPoint.ToString(),socketSend);
                cboUsers.Items.Add(socketSend.RemoteEndPoint.ToString());
                ShowMsg(socketSend.RemoteEndPoint.ToString() + " : " + "连接成功");
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start(socketSend);
            }
        }

        void Recive(object o)
        {
            socketSend = o as Socket;
            while (true)
            {
                // 客户端连接成功后,服务器应接受客户端发来的消息
                byte[] buffer = new byte[1024 * 1024 * 2];
                // 实际接收到的有效字节数
                int r = socketSend.Receive(buffer);
                if (r == 0)
                {
                    break;
                }
                string str = Encoding.UTF8.GetString(buffer, 0, r);
                ShowMsg(socketSend.RemoteEndPoint + " : " + str);
            }
        }

        void ShowMsg(string str)
        {
            txtLog.AppendText(str + "\r\n");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string str = txtMsg.Text;
            byte[] buffer = Encoding.UTF8.GetBytes(str);
            string ip = cboUsers.SelectedItem.ToString();
            dicSocket[ip].Send(buffer);
            //socketSend.Send(buffer);
            txtMsg.Text = "";
        }

        private void btnSendUser_Click(object sender, EventArgs e)
        {
            string json = JsonConvert.SerializeObject(UserList());
            byte[] buffer = Encoding.UTF8.GetBytes(json);
            socketSend.Send(buffer);
        }

        private List<User> UserList()
        {
            List<User> userList = new List<User>();
            User user = null;
            string sql = "select * from user_table";
            SqlCommand cmd = SqlUtils.ConnectSql(sql);
            SqlDataReader sdr = cmd.ExecuteReader();
            while (sdr.Read())
            {
                user = new User(sdr.GetInt32(0), sdr.GetString(1), sdr.GetString(2), sdr.GetInt32(3));
                userList.Add(user);
            }
            return userList;
        }

    }
}

客户端

namespace TestClient
{
    public partial class ClientForm : Form
    {
        Socket socketSend;
        public ClientForm()
        {
            InitializeComponent();
        }

        private void btnStart_Click(object sender, EventArgs e)
        {
            try
            {
                // 创建负责通信的socket
                socketSend = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
                IPAddress ip = IPAddress.Parse(txtServer.Text);
                IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));
                socketSend.Connect(point);
                ShowMsg("连接成功");
                Thread th = new Thread(Recive);
                th.IsBackground = true;
                th.Start();
            }
            catch { }
        }

        void Recive()
        {
            while (true)
            {
                // 客户端连接成功后,服务器应接受客户端发来的消息
                byte[] buffer = new byte[1024 * 1024 * 2];
                // 实际接收到的有效字节数
                int r = socketSend.Receive(buffer);
                if (r == 0)
                {
                    break;
                }
                string str = Encoding.UTF8.GetString(buffer, 0, r);
                ShowMsg(socketSend.RemoteEndPoint + " : " + str);
            }
        }

        void ShowMsg(string str)
        {
            txtLog.AppendText(str + "\r\n");
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Control.CheckForIllegalCrossThreadCalls = false;
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            string str = txtMsg.Text.Trim();
            byte[] buffer = Encoding.UTF8.GetBytes(str);
            socketSend.Send(buffer);
            txtMsg.Text = "";
        }
    }
}

效果

发送json数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2021-11-25

C#使用Socket发送和接收TCP数据实例

本文实例讲述了Asp.net中C#使用Socket发送和接收TCP数据的方法,分享给大家供大家参考.具体实现方法如下: 具体程序代码如下: 复制代码 代码如下: using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Text; namespace ConsoleApplication1 {     public static class So

c#(Socket)异步套接字代码示例

异步客户端套接字示例 下面的示例程序创建一个连接到服务器的客户端.该客户端是用异步套接字生成的,因此在等待服务器返回响应时不挂起客户端应用程序的执行.该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串. C# using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Text; // State object for receiving data 

C#远程发送和接收数据流生成图片的方法

本文实例讲述了C#远程发送和接收数据流生成图片的方法.分享给大家供大家参考.具体如下: 将图片转成数据流方式发送到远程服务,在通过服务器后台程序来接收数据流,再保存成图片存放在需要的地方. 这种方式就类似上传图片功能一样,希望能给一些大家另一种上传图片功能的方法. 发送数据流方法 /// <summary> /// PostBinaryData /// </summary> /// <param name="url">要发送的 url 网址</

C#请求http向网页发送接收数据的方法

本文实例为大家分享了C#请求http向网页发送数据.网页接收,供大家参考,具体内容如下 首先,我们需要的是什么东西? 用POST方式请求http,给网页传输数据,网页接收到数据之后,把数据存储到数据库中. 1.首先请求http,建立连接,把转码过的数据传输过去 2.网页接收数据,在转码之后存储到数据库 3.网页返回一个东西给传输方,表示我们已经接收到数据了 同样,我们请求http也是用的控制台模拟的 static void Main(string[] args) { string result

c#(Socket)同步套接字代码示例

同步客户端套接字示例 下面的示例程序创建一个连接到服务器的客户端.该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止.该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串. C# using System; using System.Net; using System.Net.Sockets; using System.Text; public class SynchronousSocketClient { public static void S

C#使用post发送和接收数据的方法

本文实例讲述了C#使用post发送和接收数据的方法.分享给大家供大家参考.具体实现方法如下: public partial class Post_Server : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string type = ""; string Re = ""; Re += "数据传送方式:"; if (Request.Requ

C#基于Socket套接字的网络通信封装

本文为大家分享了C#基于Socket套接字的网络通信封装代码,供大家参考,具体内容如下 摘要 之所以要进行Socket套接字通信库封装,主要是直接使用套接字进行网络通信编程相对复杂,特别对于初学者而言.实际上微软从.net 2.0开始已经提供了TCP.UDP通信高级封装类如下: TcpListener TcpClient UdpClient 微软从.net 4.0开始提供基于Task任务的异步通信接口.而直接使用socket封装库,很多socket本身的细节没办法自行控制,本文目就是提供一种so

c# socket网络编程接收发送数据示例代码

代码分2块,server端: 复制代码 代码如下: class Program    {        static void Main(string[] args)        {            TcpListener lsner = new TcpListener(9000);            lsner.Start();            Console.WriteLine("started in port: 9000");            while

python之Socket网络编程详解

什么是网络? 网络是由节点和连线构成,表示诸多对象及其相互联系.在数学上,网络是一种图,一般认为专指加权图.网络除了数学定义外,还有具体的物理含义,即网络是从某种相同类型的实际问题中抽象出来的模型.在计算机领域中,网络是信息传输.接收.共享的虚拟平台,通过它把各个点.面.体的信息联系到一起,从而实现这些资源的共享.网络是人类发展史来最重要的发明,提高了科技和人类社会的发展. 网络通信的三要素 IP地址 用来表示一台独立的主机 特殊的IP地址 127.0.0.1或称localhost(表示本地回环

详解Python Socket网络编程

Socket 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是:它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的,例如我们每天浏览网页.QQ 聊天.收发 email 等等.要解决网络上两台主机之间的进程通信问题,首先要唯一标识该进程,在 TCP/IP 网络协议中,就是通过 (IP地址,协议,端口号) 三元组来标识进程的,解决了进程标识问题,就有了通信的基础了. 本文主要介绍使用Python 进行TCP Socket 网络编程,假设你已经具

iOS socket网络编程实例详解

代码下载 服务端代码下载地址 客户端代码下载地址 相关概念 socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等.socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议.Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,从而形成了我们知道的一些最基本的函数接口. socket连接:socket连接就是所谓的长连接,理论上客户端和服务器端一旦

C# Socket网络编程实例

本文实例讲述了C# Socket网络编程技巧.分享给大家供大家参考.具体分析如下: 客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址,及应用程序所对应的端口号 TCP协议:安全稳定,一般不会发生数据丢失,但是效率低.利用TCP发生数据一般经过3次握手(所有效率低,自己百度三次握手) UDP协议:快速,效率高,但是不稳定,容易发生数据丢失(没有经过三

Pythony运维入门之Socket网络编程详解

Socket是什么? Socket 是电脑网络中进程间数据流的端点Socket 是操作系统的通信机制应用程序通过Socket进行网络数据的传输 首先,简单了解一下TCP通信过程: TCP三次握手(面试常考): 第一次握手:客户端 发送SYN报文,设置随机数序号X,服务器由SYN=1知道,客户端要求建立联机 第二次握手:服务器端接收到客户端的报文之后,经过处理,返回给客户端SYN+ACK报文,同时设置随机序号Y,此时返回的报文确认ACK=X+1 第三次握手:接收到报文的客户端,会在处理确认之后,再

python Socket网络编程实现C/S模式和P2P

C/S模式 由于网络课需要实现Socket网络编程,所以简单实现了一下,C/S模式分别用TCP/IP协议与UDP协议实现,下面将分别讲解. TCP/IP协议 TCP/IP协议是面向连接的,即客户端与服务器需要先建立连接后才能传输数据,以下是服务器端的代码实现. 服务端: import socket from threading import Thread def deal(sock,addr): print('Accept new connection from {}:{}'.format(ad

Python socket网络编程TCP/IP服务器与客户端通信

Python socket网络编程 初学 python,前段时间买了两本书<python 编程从入门到实践><Python 核心编程第三版>,第一本书主要讲的是一些基本语法和一些基本的使用方法,而第二本则深入很多,自己看来也是一知半解,刚好看到了这部分网络编程,依然有好多不太理解的地方,不过想来通过自己不断的摸索,不断地搜寻资料学习,早晚应该会变得通透吧....... 这部分主要使用的模块就是 socket 模块,在这个模块中可以找到 socket()函数,该函数用于创建套接字对象

C++中Socket网络编程实例详解

C++中Socket网络编程实例详解 现在几乎所有C/C++的后台程序都需要进行网络通讯,其实现方法无非有两种:使用系统底层socket或者使用已有的封装好的网络库.本文对两种方式进行总结,并介绍一个轻量级的网络通讯库ZeroMQ.  1.基本的Scoket编程 关于基本的scoket编程网络上已有很多资料,作者在这里引用一篇文章中的内容进行简要说明. 基于socket编程,基本上就是以下6个步骤: 1.socket()函数 2.bind()函数 3.listen().connect()函数 4

SpringBoot+Netty+WebSocket实现消息发送的示例代码

一.导入Netty依赖 <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.1.25.Final</version> </dependency> 二.搭建websocket服务器 @Component public class WebSocketServer { /** * 主线程池 */