using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks; namespace TcpIp
{
public class SocketClient
{
byte[] buffer = new byte[2048];
Socket socket;
Thread thread;
string ip, port;
public bool connect(string ip, string port) {
bool result = true;
try {
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
this.ip = ip;
this.port = port;
socket.Connect(new IPEndPoint(IPAddress.Parse(this.ip), int.Parse(this.port)));
thread = new Thread(StartReceive);
thread.IsBackground = true;
thread.Start();
}
catch (Exception) {
result = false;
}
return result;
}
private void StartReceive(object obj) {
string str;
while (true) {
Socket receiveSocket = obj as Socket;
try {
int result = receiveSocket.Receive(buffer);
if (result == 0) {
break;
}
else {
str = Encoding.Default.GetString(buffer);
}
}
catch (Exception) { throw;
}
}
}
public bool close() {
bool result = true;
try {
socket.Shutdown(SocketShutdown.Both);
socket.Close();
thread.Abort();
socket = null;
thread = null;
GC.Collect();
}
catch (Exception) { result = false;
}
return result;
}
public void send(string str) {
socket.Send(Encoding.Default.GetBytes(str));
}
public void sendbytes(byte[] buffer) {
socket.Send(buffer);
}
public bool isConnection() {
bool blockingState = socket.Blocking;
try {
if (!socket.Connected) {
try {
close();
connect(this.ip, this.port);
}
catch (Exception) { return false;
}
}
byte[] tmp = new byte[1];
socket.Blocking = false;
socket.Send(tmp, 0, 0);
socket.Blocking = blockingState;
return true;
}
catch (Exception) { return false;
}
}
}
class SocketServer
{
private static Dictionary<string, Socket> socketList = new Dictionary<string, Socket>();
public SocketServer(string ip, string port) {
try {
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint IEP = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));
socket.Bind(IEP);
socket.Listen(20);
Thread thread = new Thread(new ParameterizedThreadStart(StartServer));
thread.IsBackground = true;
thread.Start(socket);
}
catch (Exception) { throw;
}
}
public void StartServer(object obj) {
string str;
while (true) {
Socket recevicesSocket = ((Socket)obj).Accept();
str = recevicesSocket.RemoteEndPoint.ToString();
socketList.Add(str, recevicesSocket);
Thread thread = new Thread(startReceive);
thread.IsBackground = true;
thread.Start(recevicesSocket);
}
}
public void startReceive(object obj) {
while (true) {
try {
byte[] buffer = new byte[2048];
int count = ((Socket)obj).Receive(buffer);
if (count == 0) break;
string str = Encoding.Default.GetString(buffer, 0, count);
string ip = ((Socket)obj).RemoteEndPoint.ToString();
}
catch (Exception) { throw;
}
}
}
private void send2Client(string ip, string str) {
byte[] bytes = new byte[2048];
bytes = Encoding.Default.GetBytes(str);
if (socketList.ContainsKey(ip)) {
try {
socketList[ip].Send(bytes);
}
catch (Exception) { throw;
}
}
}
}
class TcpClient
{
Socket m_client;
byte[] buffer = new byte[3072 * 2048];
bool isOpen = false;
bool hasClient = false;
bool check_client() {
try {
if (m_client == null) return false;
bool isConnect = !(m_client.Poll(1000, SelectMode.SelectRead) && m_client.Available == 0) && m_client.Connected;
return isConnect;
}
catch (Exception) { return false;
}
}
void AcceptCallBack(IAsyncResult ar) {
try {
if (check_client()) {
m_client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), m_client);
hasClient = true;
while (hasClient) {
Thread.Sleep(500);
if (!check_client()) {
break;
} }
hasClient = false;
}
if (isOpen) {
Open();
}
}
catch (Exception) { throw;
}
}
void ReceiveCallBack(IAsyncResult ar) {
try {
var client = ar.AsyncState as Socket;
int length = client.EndReceive(ar);
if (length>0) {
//执行文件传输方法
OnDataRecive?.Invoke(buffer.Take(length).ToArray());
}
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), client);
}
catch (Exception) { throw;
}
}
public event Action<byte[]> OnDataRecive;
string m_ip;
int m_port;
public void Open(string ip, int port) {
Close();
IPEndPoint serverip = new IPEndPoint(IPAddress.Parse(ip), port);
m_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
m_client.BeginConnect(serverip, AcceptCallBack, m_client);
isOpen = true;
m_ip = ip;
m_port = port;
}
public void Open() {
Open(m_ip, m_port);
}
public void Close() {
if (m_client != null) {
if (m_client.Connected)
m_client.Shutdown(SocketShutdown.Both);
m_client.Close();
m_client = null;
}
hasClient = false;
isOpen = false;
}
public bool IsOpen() {
return isOpen;
}
public bool IsConnected(){
return hasClient;
}
public void Send(byte[] data) {
if (hasClient) {
m_client.Send(data);
}
}
public void Send(string str) {
if (hasClient) {
m_client.Send(Encoding.Default.GetBytes(str));
}
}
}
class TcpServer
{
Socket m_server;
Socket m_client;
byte[] buffer = new byte[1024];
bool isOpen = false;
bool hasClient = false;
bool check_client() {
try {
if (m_client == null)
return false;
bool isConnect = !(m_client.Poll(1000, SelectMode.SelectRead) && m_client.Available == 0) && m_client.Connected;
return isConnect;
}
catch (Exception) { return false;
}
}
void AcceptCallBack(IAsyncResult ar) {
try {
var server = ar.AsyncState as Socket;
var client = server.EndAccept(ar);
m_client = client;
m_client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), m_client);
hasClient = true;
while (true) {
Thread.Sleep(100);
if (!check_client()) {
if (m_client.Connected) {
m_client.Shutdown(SocketShutdown.Both);
}
m_client.Close();
m_client = null;
break;
}
}
hasClient = false;
if (m_server!=null) {
m_server.BeginAccept(new AsyncCallback(AcceptCallBack), m_server);
}
}
catch (Exception) { throw;
}
}
void ReceiveCallBack(IAsyncResult ar) {
try {
var client = ar.AsyncState as Socket;
int length = client.EndReceive(ar);
OnDataReceive?.Invoke(buffer.Take(length).ToArray());
client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new
AsyncCallback(ReceiveCallBack), client);
}
catch (Exception) { throw;
}
}
public event Action<byte[]> OnDataReceive;
public void Open(string ip,int port) {
Close();
IPEndPoint serverip = new IPEndPoint(IPAddress.Parse(ip), port);
m_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
m_server.Bind(serverip);
m_server.Listen(0);
m_server.BeginAccept(new AsyncCallback(AcceptCallBack), m_server);
isOpen = true;
}
public void Close() {
hasClient = false;
isOpen = false;
if (m_server!=null) {
if (m_server.Connected) {
m_server.Shutdown(SocketShutdown.Both);
}
m_server.Close();
m_server = null;
}
if (m_client!=null) {
if (m_client.Connected) {
m_client.Shutdown(SocketShutdown.Both);
}
m_client.Close();
m_client = null;
}
}
public bool IsOpen() {
return isOpen;
}
public bool IsConnected() {
return hasClient;
}
public void Send(byte[] data) {
if (hasClient) {
m_client.Send(data); }
}
}
}

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;
namespace TcpIp{    public class SocketClient    {        byte[] buffer = new byte[2048];        Socket socket;        Thread thread;        string ip, port;        public bool connect(string ip, string port) {            bool result = true;            try {                socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                this.ip = ip;                this.port = port;                socket.Connect(new IPEndPoint(IPAddress.Parse(this.ip), int.Parse(this.port)));                thread = new Thread(StartReceive);                thread.IsBackground = true;                thread.Start();            }            catch (Exception) {                result = false;            }            return result;        }        private void StartReceive(object obj) {            string str;            while (true) {                Socket receiveSocket = obj as Socket;                try {                    int result = receiveSocket.Receive(buffer);                    if (result == 0) {                        break;                    }                    else {                        str = Encoding.Default.GetString(buffer);                    }                }                catch (Exception) {
                    throw;                }            }        }        public bool close() {            bool result = true;            try {                socket.Shutdown(SocketShutdown.Both);                socket.Close();                thread.Abort();                socket = null;                thread = null;                GC.Collect();            }            catch (Exception) {
                result = false;            }            return result;        }        public void send(string str) {            socket.Send(Encoding.Default.GetBytes(str));        }        public void sendbytes(byte[] buffer) {            socket.Send(buffer);        }        public bool isConnection() {            bool blockingState = socket.Blocking;            try {                if (!socket.Connected) {                    try {                        close();                        connect(this.ip, this.port);                    }                    catch (Exception) {
                        return false;                    }                }                byte[] tmp = new byte[1];                socket.Blocking = false;                socket.Send(tmp, 0, 0);                socket.Blocking = blockingState;                return true;            }            catch (Exception) {
                return false;            }        }    }    class SocketServer    {        private static Dictionary<string, Socket> socketList = new Dictionary<string, Socket>();        public SocketServer(string ip, string port) {            try {                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                IPEndPoint IEP = new IPEndPoint(IPAddress.Parse(ip), int.Parse(port));                socket.Bind(IEP);                socket.Listen(20);                Thread thread = new Thread(new ParameterizedThreadStart(StartServer));                thread.IsBackground = true;                thread.Start(socket);            }            catch (Exception) {
                throw;            }        }        public void StartServer(object obj) {            string str;            while (true) {                Socket recevicesSocket = ((Socket)obj).Accept();                str = recevicesSocket.RemoteEndPoint.ToString();                socketList.Add(str, recevicesSocket);                Thread thread = new Thread(startReceive);                thread.IsBackground = true;                thread.Start(recevicesSocket);            }        }        public void startReceive(object obj) {            while (true) {                try {                    byte[] buffer = new byte[2048];                    int count = ((Socket)obj).Receive(buffer);                    if (count == 0) break;                    string str = Encoding.Default.GetString(buffer, 0, count);                    string ip = ((Socket)obj).RemoteEndPoint.ToString();                }                catch (Exception) {
                    throw;                }            }        }        private void send2Client(string ip, string str) {            byte[] bytes = new byte[2048];            bytes = Encoding.Default.GetBytes(str);            if (socketList.ContainsKey(ip)) {                try {                    socketList[ip].Send(bytes);                }                catch (Exception) {
                    throw;                }            }        }    }    class TcpClient    {        Socket m_client;        byte[] buffer = new byte[3072 * 2048];        bool isOpen = false;        bool hasClient = false;        bool check_client() {            try {                if (m_client == null) return false;                bool isConnect = !(m_client.Poll(1000, SelectMode.SelectRead) && m_client.Available == 0) && m_client.Connected;                return isConnect;            }            catch (Exception) {
                return false;            }        }        void AcceptCallBack(IAsyncResult ar) {            try {                if (check_client()) {                    m_client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), m_client);                    hasClient = true;                    while (hasClient) {                        Thread.Sleep(500);                        if (!check_client()) {                            break;                        }
                    }                    hasClient = false;                }                if (isOpen) {                    Open();                }            }            catch (Exception) {
                throw;            }        }        void ReceiveCallBack(IAsyncResult ar) {            try {                var client = ar.AsyncState as Socket;                int length = client.EndReceive(ar);                if (length>0) {                    //执行文件传输方法                    OnDataRecive?.Invoke(buffer.Take(length).ToArray());                }                client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), client);            }            catch (Exception) {
                throw;            }        }        public event Action<byte[]> OnDataRecive;        string m_ip;        int m_port;        public void Open(string ip, int port) {            Close();            IPEndPoint serverip = new IPEndPoint(IPAddress.Parse(ip), port);            m_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            m_client.BeginConnect(serverip, AcceptCallBack, m_client);            isOpen = true;            m_ip = ip;            m_port = port;        }        public void Open() {            Open(m_ip, m_port);        }        public void Close() {            if (m_client != null) {                if (m_client.Connected)                    m_client.Shutdown(SocketShutdown.Both);                m_client.Close();                m_client = null;            }            hasClient = false;            isOpen = false;        }        public bool IsOpen() {            return isOpen;        }        public bool IsConnected(){            return hasClient;        }        public void Send(byte[] data) {            if (hasClient) {                m_client.Send(data);            }        }        public void Send(string str) {            if (hasClient) {                m_client.Send(Encoding.Default.GetBytes(str));            }        }    }    class TcpServer    {        Socket m_server;        Socket m_client;        byte[] buffer = new byte[1024];        bool isOpen = false;        bool hasClient = false;        bool check_client() {            try {                if (m_client == null)                    return false;                bool isConnect = !(m_client.Poll(1000, SelectMode.SelectRead) && m_client.Available == 0) && m_client.Connected;                return isConnect;            }            catch (Exception) {
                return false;            }        }        void AcceptCallBack(IAsyncResult ar) {            try {                var server = ar.AsyncState as Socket;                var client = server.EndAccept(ar);                m_client = client;                m_client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), m_client);                hasClient = true;                while (true) {                    Thread.Sleep(100);                    if (!check_client()) {                        if (m_client.Connected) {                            m_client.Shutdown(SocketShutdown.Both);                        }                        m_client.Close();                        m_client = null;                        break;                    }                }                hasClient = false;                if (m_server!=null) {                    m_server.BeginAccept(new AsyncCallback(AcceptCallBack), m_server);                }            }            catch (Exception) {
                throw;            }        }        void ReceiveCallBack(IAsyncResult ar) {            try {                var client = ar.AsyncState as Socket;                int length = client.EndReceive(ar);                OnDataReceive?.Invoke(buffer.Take(length).ToArray());                client.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), client);            }            catch (Exception) {
                throw;            }        }        public event Action<byte[]> OnDataReceive;        public void Open(string ip,int port) {            Close();            IPEndPoint serverip = new IPEndPoint(IPAddress.Parse(ip), port);            m_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            m_server.Bind(serverip);            m_server.Listen(0);            m_server.BeginAccept(new AsyncCallback(AcceptCallBack), m_server);            isOpen = true;        }        public void Close() {            hasClient = false;            isOpen = false;            if (m_server!=null) {                if (m_server.Connected) {                    m_server.Shutdown(SocketShutdown.Both);                }                m_server.Close();                m_server = null;            }            if (m_client!=null) {                if (m_client.Connected) {                    m_client.Shutdown(SocketShutdown.Both);                }                m_client.Close();                m_client = null;            }        }        public bool IsOpen() {            return isOpen;        }        public bool IsConnected() {            return hasClient;        }        public void Send(byte[] data) {            if (hasClient) {                m_client.Send(data);
            }        }    }}

2021-7-6 new tcpip的更多相关文章

  1. 图解TCP-IP协议

    本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 图1 TCP 三次握手四次挥手 图1 ...

  2. TCPIP、Http、Socket的协议~ 写得挺形象,赞

    这篇文章写得挺形象,对TCPIP.HTTP.Socket的作用有一个整体层次的理解. 转载文章内容如下: 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.   通过初步的了 ...

  3. codevs 2021 中庸之道

    2021 中庸之道  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description 给定一个长度为N的序列,有Q次询问,每次 ...

  4. [TCPIP] 传输控制协议 Note

    TCPIP  TCP 传输控制协议 TCP提供一种面向连接的,可靠的字节流服务. 面向连接意味着两个使用TCP的应用在传输数据之前先建立一个TCP连接,这个过程跟打电话相似.在一个TCP连接中仅有两方 ...

  5. [TCPIP] DNS Note

    TCPIP DNS  域名系统 DNS 是一个应用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换及有关电子邮件的选路信息. 对DNS的访问是通过一个地址解析器来完成的,在Un ...

  6. 拿搬东西来解释udp tcpip bio nio aio aio异步

     [群主]雷欧纳德简单理解 tcpip是有通信确认的面对面通信   有打招呼的过程  有建立通道的过程 有保持通道的确认    有具体传输udp是看到对面的人好像在对面等你 就往对面扔东西[群主]雷欧 ...

  7. Bzoj 1982: [Spoj 2021]Moving Pebbles 博弈论

    1982: [Spoj 2021]Moving Pebbles Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 130  Solved: 88[Submi ...

  8. TCPIP通信

    最近在开发TCPIP通信,封装了3个类,望各位大神指点指点. using System; using System.Collections.Generic; using System.Text; us ...

  9. Linux之TCPIP内核参数优化

    /proc/sys/net目录 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的,任何修改在系统重启后都会丢失),例如下面这 ...

  10. 配置HP LaserJet M1536dnf MFP打印机通过TCPIP共享多台计算机

    HP LaserJet M1536dnf MFP打印机通过TCPIP共享多台计算机配置配置过程:1.确保网线插入到打印机后,点设置按钮,到网络配置中查看IP地址,确保与主机或者路由器的IP地址一致,设 ...

随机推荐

  1. JAVA注解@Scheduled 不执行

    spring boot项目需要在启动类加上注解 @EnableScheduling 定义一个接口 StockTask.java 1 public interface StockTask { 2 pub ...

  2. RTP分包模式(H264/H265)

    在rfc6184-h264文档5.4章节有详细说明.以及rfc7798-h265文档4.2章节中也有部分介绍. 一.NALU Header ● H264 NALU Header(1 byte)结构图如 ...

  3. H.323详解

    H.323详解 文章中的某些图粘不上去,可到资源页下载word版点击打开链接 转载博客:https://blog.csdn.net/hemingliang1987/article/details/16 ...

  4. vue刷新当前组件的方法

    一:v-if控制组件,先设false,再true强制刷新组件(有时会产生一种奇怪的效果) 1 <medical-record v-if="fresh" /> 2 3 t ...

  5. linux安装tomcat,mysql

    环境:centos7.6 ssh连接工具:tabby 安装tomcat 创建目录 mkdir /opt/tomcat 获取tomcat: 1.自己百度下载 2.我这里提供百度网盘 链接:https:/ ...

  6. count(列名)、count(1)和 count(*)有什么区别?

    在MySQL中,这几个都是统计操作,很多人在使用的时候,都使用的是count(1),这有没有问题?使用正确?达到了统计效果? 我们从效果和效率两方面来分析下 执行效果 count(*) 包括了所有的列 ...

  7. 【Python基础】列表的基本使用

    列表是由一系列元素组成的有序集合.列表可以包含任意类型的元素.它是可变的,可以随时添加.删除.替换元素.列表可以使用方括号([])括起来,并使用逗号分隔元素. list1 = [1, 2, 3, &q ...

  8. #Powerbi函数学习 SELECTEDVALUE与ISFILTERED

    Power BI中的DAX函数ISFILTERED可以用来判断一个表或者一个列是否被筛选器所影响. 这个函数的语法很简单,就是ISFILTERED(<table_or_column_name&g ...

  9. 数据库优化案例—某市中心医院HIS系统

    记得在自己学习数据库知识的时候特别喜欢看案例,因为优化的手段是容易掌握的,但是整体的优化思想是很难学会的.这也是为什么自己特别喜欢看案例,今天也开始分享自己做的优化案例. 最近一直很忙,博客产出也少的 ...

  10. SQL基础知识扫盲

    @ 目录 SQL & 数据库基础知识扫盲 SQL是什么? 数据库是什么? 挺身入局,实践出真知 DBMS初体验 MySQL:初体验 Oracle:初体验 PostgreSQL:初体验 Demo ...