zoukankan      html  css  js  c++  java
  • 简单的Soket通信

    今天碰见一个Case说要占掉一个端口再运行。那好,写个Socket让他一直通信,也就占用端口了:

    TCP

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;

    namespace ConsoleApplication1.SocketTest
    {
    class SocketTCP
    {
    private static void Server()
    {
    int recv;
    byte[] data = new byte[1024];
    IPEndPoint SerIP
    = new IPEndPoint(IPAddress.Any, 8888);
    Socket serSock
    = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    serSock.Bind(SerIP);
    serSock.Listen(
    5);

    Console.WriteLine(
    "Waiting the client.....");

    Socket cliSock
    = serSock.Accept();
    IPEndPoint CliIP
    = cliSock.RemoteEndPoint as IPEndPoint;
    Console.WriteLine(
    "connect with client:" + CliIP.Address + " at port:" + CliIP.Port);
    string welcome = "welcome here!";

    data
    = Encoding.ASCII.GetBytes(welcome);
    cliSock.Send(data, data.Length, SocketFlags.None);
    //发送信息
    while (true)
    {
    //用死循环来不断的从客户端获取信息
    data = new byte[1024];
    recv
    = cliSock.Receive(data);
    Console.WriteLine(
    "recv=" + recv);
    if (recv == 0)//当信息长度为0,说明客户端连接断开
    break;
    Console.WriteLine(Encoding.ASCII.GetString(data,
    0, recv));
    cliSock.Send(data, recv, SocketFlags.None);
    }
    Console.WriteLine(
    "Disconnected from" + CliIP.Address);
    cliSock.Close();
    serSock.Close();
    }

    private static void client()
    {
    byte[] data = new byte[1024];
    Socket Client
    = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    IPEndPoint IP
    = new IPEndPoint(IPAddress.Parse("172.18.6.249"), 8888);
    try
    {
    Client.Connect(IP);
    }
    catch (Exception e)
    {
    Console.WriteLine(
    "unable to connect to server");
    Console.WriteLine(e.ToString());
    return;
    }

    int recv = Client.Receive(data);
    string strdata = Encoding.ASCII.GetString(data, 0, recv);
    Console.WriteLine(strdata);
    while (true)
    {
    string input = Console.ReadLine();
    if (input == "exit")
    break;
    Client.Send(Encoding.ASCII.GetBytes(input));
    data
    = new byte[1024];
    recv
    = Client.Receive(data);
    strdata
    = Encoding.ASCII.GetString(data, 0, recv);
    Console.WriteLine(strdata);
    }
    Console.WriteLine(
    "disconnect from sercer");
    Client.Shutdown(SocketShutdown.Both);
    Client.Close();

    }
    public static void Run()
    {
    Server();
    new Thread(client).Start();
    }
    }
    }

    UDP

    代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;

    namespace ConsoleApplication1.SocketTest
    {
    class SockUDP
    {
    private static void client()
    {
    byte[] data = new byte[1024];//定义一个数组用来做数据的缓冲区
    string input, stringData;
    IPEndPoint ipep
    = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9050);
    Socket server
    = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
    string welcome = "Hello,are you there?";
    data
    = Encoding.ASCII.GetBytes(welcome);
    server.SendTo(data, data.Length, SocketFlags.None, ipep);
    //将数据发送到指定的终结点

    IPEndPoint sender
    = new IPEndPoint(IPAddress.Any, 0);
    EndPoint Remote
    = (EndPoint)sender;
    data
    = new byte[1024];
    int recv = server.ReceiveFrom(data, ref Remote);//接受来自服务器的数据

    Console.WriteLine(
    "Message received from{0}:", Remote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data,
    0, recv));
    while (true)//读取数据
    {
    input
    = Console.ReadLine();//从键盘读取数据
    if (input == "text")//结束标记
    {
    break;
    }
    server.SendTo(Encoding.ASCII.GetBytes(input), Remote);
    //将数据发送到指定的终结点Remote
    data = new byte[1024];
    recv
    = server.ReceiveFrom(data, ref Remote);//从Remote接受数据
    stringData = Encoding.ASCII.GetString(data, 0, recv);
    Console.WriteLine(stringData);
    }
    Console.WriteLine(
    "Stopping client");
    server.Close();

    }
    private static void Server()
    {
    int recv;
    byte[] data = new byte[1024];
    IPEndPoint ipep
    = new IPEndPoint(IPAddress.Any, 9050);//定义一网络端点
    Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//定义一个Socket
    newsock.Bind(ipep);//Socket与本地的一个终结点相关联
    Console.WriteLine("Waiting for a client..");

    IPEndPoint sender
    = new IPEndPoint(IPAddress.Any, 0);//定义要发送的计算机的地址
    EndPoint Remote = (EndPoint)(sender);//
    recv = newsock.ReceiveFrom(data, ref Remote);//接受数据
    Console.WriteLine("Message received from{0}:", Remote.ToString());
    Console.WriteLine(Encoding.ASCII.GetString(data,
    0, recv));

    string welcome = "Welcome to my test server!";
    data
    = Encoding.ASCII.GetBytes(welcome);
    newsock.SendTo(data, data.Length, SocketFlags.None, Remote);
    while (true)
    {
    data
    = new byte[1024];
    recv
    = newsock.ReceiveFrom(data, ref Remote);
    Console.WriteLine(Encoding.ASCII.GetString(data,
    0, recv));
    newsock.SendTo(data, recv, SocketFlags.None, Remote);
    }
    }

    public static void Run()
    {
    Server();
    }
    }
    }

    有时间的研究研究异步的了。。。

  • 相关阅读:
    希尔排序
    Java内存区域与内存溢出异常
    插入排序
    选择排序
    冒泡排序
    专利申请笔记
    Python基础指北
    mini web
    linux i/o multiplexing
    Python decorator module
  • 原文地址:https://www.cnblogs.com/jimson/p/socket.html
Copyright © 2011-2022 走看看