zoukankan      html  css  js  c++  java
  • Socket

    1.服务端

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    namespace TcpService
    {
        class Server
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                int recv;//用于表示客户端发送的信息长度
                byte[] data = new byte[1024];//用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组
                IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 8080);//本机预使用的IP和端口
                Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                newsock.Bind(ipep);//绑定
                newsock.Listen(10);//监听
                Console.WriteLine("waiting for a client");
                Socket client = newsock.Accept();//当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信
                IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
                Console.WriteLine("connect with client:" + clientip.Address + " at port:" + clientip.Port);
                string welcome = "welcome here!";
                data = Encoding.ASCII.GetBytes(welcome);
                client.Send(data, data.Length, SocketFlags.None);//发送信息
                while (true)
                {//用死循环来不断的从客户端获取信息
                    data = new byte[1024];
                    recv = client.Receive(data);
                    Console.WriteLine("recv=" + recv);
                    if (recv == 0)//当信息长度为0,说明客户端连接断开
                        break;
                    Console.WriteLine(Encoding.ASCII.GetString(data, 0, recv));
    
                    data = data = Encoding.UTF8.GetBytes("send success.");
                    client.Send(data, data.Length, SocketFlags.None);
                }
                Console.WriteLine("Disconnected from" + clientip.Address);
                client.Close();
                newsock.Close();
            }
        }
    }

    2.客户端

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    
    namespace TcpClient
    {
        class Client
        {
            /// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            [STAThread]
            static void Main(string[] args)
            {
                //
                // TODO: 在此处添加代码以启动应用程序
                //
                byte[] data = new byte[1024];
                Socket newclient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                Console.Write("please input the server ip:");
                string ipadd = Console.ReadLine();
                Console.WriteLine();
                Console.Write("please input the server port:");
                int port = Convert.ToInt32(Console.ReadLine());
                IPEndPoint ie = new IPEndPoint(IPAddress.Parse(ipadd),port);//服务器的IP和端口
                try
                {
                    //因为客户端只是用来向特定的服务器发送信息,所以不需要绑定本机的IP和端口。不需要监听。
                    newclient.Connect(ie);
                }
                catch (SocketException e)
                {
                    Console.WriteLine("unable to connect to server");
                    Console.WriteLine(e.ToString());
                    return;
                }
                int recv = newclient.Receive(data);
                string stringdata = Encoding.ASCII.GetString(data, 0, recv);
                Console.WriteLine(stringdata);
                while (true)
                {
                    string input = Console.ReadLine();
                    if (input == "exit")
                        break;
                    newclient.Send(Encoding.ASCII.GetBytes(input));
                    data = new byte[1024];
                    recv = newclient.Receive(data);
                    stringdata = Encoding.ASCII.GetString(data, 0, recv);
                    Console.WriteLine(stringdata);
                }
                Console.WriteLine("disconnect from sercer");
                newclient.Shutdown(SocketShutdown.Both);
                newclient.Close();
    
            }
        }
    }
  • 相关阅读:
    EasyUI 常用图标
    DataGridView滚动条联动
    FTP下载工具
    C# 解析带命名空间的xml
    1.基于3.x版本vue脚手架创建新项目
    js处理异步的几种方式
    JS字符串常用方法
    git(开源的分布式版本控制系统)
    js检查数据类型的方法
    数组的常用方法
  • 原文地址:https://www.cnblogs.com/valor-xh/p/6030911.html
Copyright © 2011-2022 走看看