socket  socket讲解

一.socket是何物?

参考百度百科:

http://baike.baidu.com/link?url=4YNURsJLEaL0II79C68gPUoYKliXWJLM8V6H5QL0r_QOEmrxSQsnFPYxeuBx1U1bukTcAxhcl1glTOjxiGZBgSqb5G9_4N9Dj-XX-jXtXba

二.socket常用类及函数讲解:(为如下demo做准备)

IPAddress:

IPAddress.Parse();

IPEndPoint:

Encoding:

Encoding.Unicode.GetString()
Encoding.Unicode.GetBytes()

Socket:

Send、Receive、Accept;

Thread:

Thread.Sleep();

三.Demo:(仅供参考)

1.Client  code:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading; namespace ClientSocket_Demo
{
public partial class Client : Form
{
public Client()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
} private Socket connSocket;
private Thread ReceiveThread; private void btnConnection_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtIp.Text))
{
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "ip is null");
return;
}
if (string.IsNullOrEmpty(txtPort.Text))
{
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "port is null");
return;
}
Connection();
} private void btnSend_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtMsg.Text))
{
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "msg is null");
return;
}
SendMsg();
} /// <summary>
/// connection
/// </summary>
private void Connection()
{
IPAddress ip = IPAddress.Parse(txtIp.Text);
IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(txtPort.Text));
connSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
connSocket.Connect(endPoint);
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "connection success.");
btnConnection.Enabled = false; }
catch (Exception ex)
{
connSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "connection fail.");
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
} ReceiveThread = new Thread(ReceiveCallBack);
ReceiveThread.Start();
ReceiveThread.IsBackground = true;
} /// <summary>
/// send msg
/// </summary>
private void SendMsg()
{
byte[] buffer = new byte[];
string msg = txtMsg.Text;
lstLog.Items.Add(DateTime.Now.ToString() + ":" + msg);
buffer = Encoding.Unicode.GetBytes(msg); if (connSocket != null)
{
connSocket.Send(buffer);
}
else
{
connSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "send fail.");
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "no connection!");
}
} /// <summary>
/// receive
/// </summary>
private void ReceiveCallBack()
{
byte[] buffer = new byte[];
int count = ; while (true)
{
Thread.Sleep();
try
{
count = connSocket.Receive(buffer);
if (count == )
{
connSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":server disconnect.");
break;
}
string msg = Encoding.Unicode.GetString(buffer,, count);
lstLog.Items.Add(DateTime.Now.ToString() + ":" + msg);
}
catch (Exception ex)
{
connSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":server disconnect.");
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
break;
}
}
}
}
}

2.Server code:

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms; namespace Socket_Demo
{
public partial class Server : Form
{
public Server()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false;
} private Socket connSocket;
private Thread listenThread;
private Thread ReceiveThread; private void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtIp.Text))
{
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "ip is null");
return;
}
if (string.IsNullOrEmpty(txtPort.Text))
{
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "port is null");
return;
}
Start();
} /// <summary>
/// start
/// </summary>
private void Start()
{
byte[] buffer = new byte[];
IPAddress ip = IPAddress.Parse(txtIp.Text);
IPEndPoint endPoint = new IPEndPoint(ip, int.Parse(txtPort.Text));
connSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
connSocket.Bind(endPoint);
connSocket.Listen();
lstLog.Items.Add(DateTime.Now.ToString() + ":" + "listen:" + txtPort.Text);
button1.Enabled = false; //监听线程
listenThread = new Thread(ListenCallBack);
listenThread.Start(connSocket);
listenThread.IsBackground = true;
} /// <summary>
/// listen
/// </summary>
/// <param name="o"></param>
private void ListenCallBack(object obj)
{
string ip = string.Empty; //创建监听套接字
Socket listenSocket = obj as Socket; while (true)
{
Thread.Sleep(); try
{
//创建通信套接字
Socket socket = listenSocket.Accept();
ip = socket.RemoteEndPoint.ToString();
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ip + " connect success."); //通信线程
ReceiveThread = new Thread(ReceiveCallBack);
ReceiveThread.Start(socket);
ReceiveThread.IsBackground = true;
}
catch (Exception ex)
{
listenSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ip + " connect fail.");
break;
}
}
} /// <summary>
/// receive
/// </summary>
/// <param name="o"></param>
private void ReceiveCallBack(object o)
{
byte[] buffer = new byte[];
int count = ;
string ip = string.Empty; Socket ReceiveSocket = o as Socket; while (true)
{
Thread.Sleep();
try
{
ip = ReceiveSocket.RemoteEndPoint.ToString();
count = ReceiveSocket.Receive(buffer);
if (count == )
{
ReceiveSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":client disconnect.");
break;
}
string msg = Encoding.Unicode.GetString(buffer, , count);
lstLog.Items.Add(DateTime.Now.ToString() + ":" + msg);
}
catch (Exception ex)
{
ReceiveSocket.Close();
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ip + "client disconnect.");
lstLog.Items.Add(DateTime.Now.ToString() + ":" + ex.ToString());
break;
}
}
} private void Server_Load(object sender, EventArgs e)
{
var localhostIp = Dns.GetHostEntry(Dns.GetHostName()).AddressList[];
txtIp.Text = localhostIp.ToString();
txtPort.Text = "";
}
}
}

四.注意事项:

socket socket讲解的更多相关文章

  1. [Socket]Socket文件传输

    1.Server import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException ...

  2. [Socket]Socket聊天小程序

    一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...

  3. [Socket]Socket进程间的通信

    转自:http://blog.csdn.net/giantpoplar/article/details/47657303 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket ...

  4. ResourceWarning: unclosed <socket.socket fd=864, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('10.100.x.x', 37321), raddr=('10.1.x.x', 8500)>解决办法

    将代码封装,并使用unittest调用时,返回如下警告: C:\python3.6\lib\collections\__init__.py:431: ResourceWarning: unclosed ...

  5. Python socket & socket server

    socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(套接字). 建立网络通信连接至少要一对socket.socket是对TCP/IP的封装 使用方法 ...

  6. 关于iOS socket的讲解介绍

    socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...

  7. dotnet调用node.js写的socket服务(websocket/socket/socket.io)

    https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...

  8. socket系列之客户端socket——Socket类

    假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...

  9. 执行Socket socket = new Socket(ip, port);时抛出个异常:android.os.NetworkOnMainThreadException解决办法

    首先,确认你的android版本是4.0之后再用此方法解决,因为在4.0之后在主线程里面执行Http请求才会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧.Android在4.0之前的版本 ...

随机推荐

  1. docker 摆渡镜像脚本

    #!/bin/bash if [ $# != 1 ];then echo "Param error";exit; fi DOCKER_NAME=$1 IMAGE_TAG=${DOC ...

  2. Elasticsearch的过滤查询

    声明:我使用的elasticsearch的版本是5.4.0,具体参考下面的链接 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/ ...

  3. 用IntelliJ IDEA建maven项目,如何解决main下无法创建java源文件

    一.缺少java源文件 如下图: 现在想要在main下面增加java源文件,效果图如下所示: 首先,在main目录下新建java文件夹,就是源文件目录, 然后,右键,选择Mark Directory ...

  4. 2016.5.30让窗口处于最顶层的方法,比TopMost灵活

    最简单的方法Form. Activate() 稍复杂的方法用API,目前没有看出比第一种方法有什么好处(可操作其它窗口,这就是好处2016.7.31) [System.Runtime.InteropS ...

  5. sqlserver 使用维护计划备份

    https://www.cnblogs.com/teafree/p/4240040.html

  6. python爬虫框架(3)--Scrapy框架安装配置

    1.安装python并将scripts配置进环境变量中 2.安装pywin32 在windows下,必须安装pywin32,安装地址:http://sourceforge.net/projects/p ...

  7. solr安装部署、solr测试创建core、用solrj 访问solr(索引和搜索)

    一.安装solr4.8: 1.把apache-solr-4.8.1\example\webapps下的solr.war文件拷贝到Tomcat下的Tomcat7.0\webapps目录下,tomcat启 ...

  8. 关于web.xml中的<welcome-file-list>中的默认首页文件

    先看我的配置文件: <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome ...

  9. JAVA语法规则总结

    单继承多实现 抽象类  抽象方法 使用关键字:abstract修饰的方法就是抽象方法; 抽象方法的形式:只有方法的声明,没有方法体; 抽象方法一般存在于父类中,相当于强制要求子类必须重写该方法,相当于 ...

  10. matlab rand(3,5)

    rand()函数在(0,1)上创建均匀分布的随机数的数组 >> rand(3,5) ans = 0.8147 0.9134 0.2785 0.9649 0.9572 0.9058 0.63 ...