C# Socket 简单的控制台案例

一、服务器端

1. 实例化并设置socket实例对象

a.创建ip地址和端口

b.绑定监听地址

c.设置一下允许同时访问数

2. 监听连接

a.通过启动一个新的线程执行,这样主线程不会假死(启动线程,所带的参数必须是object类型)

b.利用循环等待连接并返回一个负责通信的socket实例

c.返回的socket实例中可以获取到所连接客服的IP地址

3. 接收客服的发送过来的消息

a.在监听方法中启动一个新的线程执行

b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数

c.如果有效字节数为0则跳出循环

d.接收到消息给客服的返回消息

4. 控制台程序服务器端代码

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace ServerSocket
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
            IPAddress ip = IPAddress.Any;
            IPEndPoint point = new IPEndPoint(ip, 2333);
            //socket绑定监听地址
            serverSocket.Bind(point);
            Console.WriteLine("Listen Success");
            //设置同时连接个数
            serverSocket.Listen(10);

            //利用线程后台执行监听,否则程序会假死
            Thread thread = new Thread(Listen);
            thread.IsBackground = true;
            thread.Start(serverSocket);

            Console.Read();
        }

        /// <summary>
        /// 监听连接
        /// </summary>
        /// <param name="o"></param>
        static void Listen(object o)
        {
            var serverSocket = o as Socket;
            while (true)
            {
                //等待连接并且创建一个负责通讯的socket
                var send = serverSocket.Accept();
                //获取链接的IP地址
                var sendIpoint = send.RemoteEndPoint.ToString();
                Console.WriteLine($"{sendIpoint}Connection");
                //开启一个新线程不停接收消息
                Thread thread = new Thread(Recive);
                thread.IsBackground = true;
                thread.Start(send);
            }
        }

        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="o"></param>
        static void Recive(object o)
        {
            var send = o as Socket;
            while (true)
            {
                //获取发送过来的消息容器
                byte[] buffer = new byte[1024 * 1024 * 2];
                var effective = send.Receive(buffer);
                //有效字节为0则跳过
                if (effective == 0)
                {
                    break;
                }
                var str = Encoding.UTF8.GetString(buffer,0, effective);
                Console.WriteLine(str);

           var buffers = Encoding.UTF8.GetBytes("Server Return Message");
           send.Send(buffers);

            }
        }
    }
}

二、客户端

1. 实例化并进行连接socket实例对象

a.创建ip地址和端口(服务器的IP和端口)

b.与服务器端建立链接

2. 接收服务器发送的消息

a.启动一个新的线程执行

b.利用循环获取发送过来的消息,调用获取消息的方法需要传递一个字节变量参数,作为容器。方法返回值为int,表示获取到的有效字节数

c.如果有效字节数为0则跳出循环

3. 给服务器发送消息

    a. 调用socket对象的send()方法直接发送

4. 控制台程序客户端代码

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

namespace SocketClient
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            //创建实例
            Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);
            IPAddress ip = IPAddress.Parse("192.168.0.111");
            IPEndPoint point = new IPEndPoint(ip, 2333);
            //进行连接
            socketClient.Connect(point);

            //不停的接收服务器端发送的消息
            Thread thread = new Thread(Recive);
            thread.IsBackground = true;
            thread.Start(socketClient);

            //不停的给服务器发送数据
            int i = 0;
            while (true)
            {
                i++;
                var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");
                var temp = socketClient.Send(buffter);
                Thread.Sleep(1000);
            }

        }

        /// <summary>
        /// 接收消息
        /// </summary>
        /// <param name="o"></param>
        static void Recive(object o)
        {
            var send = o as Socket;
            while (true)
            {
                //获取发送过来的消息
                byte[] buffer = new byte[1024 * 1024 * 2];
                var effective = send.Receive(buffer);
                if (effective == 0)
                {
                    break;
                }
                var str = Encoding.UTF8.GetString(buffer, 0, effective);
                Console.WriteLine(str);
            }
        }
    }
}
时间: 2024-10-04 01:10:01

C# Socket 简单的控制台案例的相关文章

(转)C# Socket简单例子(服务器与客户端通信)

本文转载自:http://blog.csdn.net/andrew_wx/article/details/6629721 这个例子只是简单实现了如何使用 Socket 类实现面向连接的通信. 注意:此例子的目的只是为了说明用套接字写程序的大概思路,而不是实际项目中的使用程序.在这个例子中,实际上还有很多问题没有解决,如消息边界问题.端口号是否被占用.消息命令的解析问题等.. 下面是两个程序的代码,(两个程序均为控制台程序) 先发服务端的(Server)完整代码如下: 引入命名空间: [cshar

UDP(socket)接和数据案例封装成C++代码

 配置QT下的pro文件 TEMPLATE = app CONFIG += console CONFIG -= app_bundle CONFIG -= qt   LIBS += -lWs2_32   ##标示使用window下的Ws2_32.lib,-l表示要链接后面的库 #-lWs2_32,link Ws2_32.lib   SOURCES += main.cpp \     udp.cpp   HEADERS += \     udp.h 编写udp.h文件 #ifndef UDP_H

【android】Socket简单用法

原文地址:http://www.cnblogs.com/harrisonpc/archive/2011/03/31/2001565.html Socket通常也称做”套接字“,用于描述IP地址和端口,废话不多说,它就是网络通信过程中端点的抽象表示.值得一提的是,Java在包java.net中提供了两个类Socket和ServerSocket,分别用来表示双向连接的客户端和服务端.这是两个封装得非常好的类,使用起来很方便! 下面将首先创建一个SocketServer的类作为服务端如下,该服务端实现

socket 简单的模板

服务端: #!/usr/bin/python import socket s=socket.socket() host='10.67.15.96' port=889 s.bind((host,port)) s.listen(5) while True: c,addr=s.accept() print '++++++' c.send('server') b=c.recv(1024) print b c.close() 客户端: #!/usr/bin/python import socket s=s

Android Socket简单测试

这里是将pc作为server,设备作为客户端. Server端代码: public static final String SERVERIP = "192.168.0.2"; public static final int SERVERPORT = 51706; public void run() { try { System.out.println("S: Connecting..."); ServerSocket serverSocket = new Serve

Python网络编程02/基于TCP协议的socket简单的通信

目录 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 2.socket 2.1 socket套接字 2.2 基于TCP协议的socket简单通信 Python网络编程02/基于TCP协议的socket简单的通信 1.昨日内容回顾 1.单播:单独联系某一个人 2.广播:给所有人发送消息(群发) 3.比特流:bit就是0101跟水流一样的源源不断的发送01010101 4.以太网协议:将数据进行分组:一组称之为一帧,数据报 head|data head:18字节:

windows socket 简单的服务端和客户端代码

客户端代码 //socket简单的客户端代码 #define WIN32_LEAN_AND_MEAN #define _CRT_SECURE_NO_WARNINGS #define _WINSOCK_DEPRECATED_NO_WARNINGS #include <stdio.h> #include <string.h> #include <Windows.h> #include <WinSock2.h> #pragma comment(lib, "

网络编程(学习整理)---2--(Udp)实现简单的控制台聊天室

1.UDP协议: 总结一下,今天学习的一点知识点! UDP也是一种通信协议,常被用来与TCP协议作比较!我们知道,在发送数据包的时候使用TCP协议比UDP协议安全,那么到底安全在哪里呢?怎么理解呢! 下面我说一下我的简单理解! 由于TCP协议是一种面向连接的协议,有三次挥手通信确认机制,且数据包没有代销限制,TCP协议确保在通信双方都收到对方确认信息的前提下,才开始为通信的双方传输信息(数据包)! 这样数据包的传输可以得到安全保障!所以简单的理解为安全的!当然一旦,出现网络问题,或者一些其他意外

网络编程(学习整理)---1--实现简单的控制台聊天室

1.简单的聊天室(控制台): 功能实现: 客户端和服务端的信息交流: 2.牵扯到的知识点: 这个我大概说一下,详细后面见代码! 1) 网络通讯的三要素 1. IP 2. 端口号. 3. 协议   2) InetAddress(IP类) 常用的方法: getLocalHost(); 获取本机的IP地址 getByName("IP或者主机名") 根据一个IP地址的字符串形式或者是一个主机名生成一个IP地址对象. (用于获取别人的IP地址对象) getHostAddress() 返回一个IP