socket socket讲解
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讲解的更多相关文章
- [Socket]Socket文件传输
1.Server import java.io.DataInputStream; import java.io.FileOutputStream; import java.io.IOException ...
- [Socket]Socket聊天小程序
一个简单是Socket聊天小程序,读写操作在不同的线程中.服务器端采用线程池. 1.Server import java.io.IOException; import java.net.ServerS ...
- [Socket]Socket进程间的通信
转自:http://blog.csdn.net/giantpoplar/article/details/47657303 前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket ...
- 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 ...
- Python socket & socket server
socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket(套接字). 建立网络通信连接至少要一对socket.socket是对TCP/IP的封装 使用方法 ...
- 关于iOS socket的讲解介绍
socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程 ...
- dotnet调用node.js写的socket服务(websocket/socket/socket.io)
https://github.com/jstott/socketio4net/tree/develop socket.io服务端node.js,.里面有js写的客户端:http://socket.io ...
- socket系列之客户端socket——Socket类
假设TCP套接字服务器端已经建立好并正在监听客户端的连接了,那么客户端就可以通过Socket类来发起连接.客户端发起一个连接请求后,就被动地在等待服务器的响应.这个类同样位于java.net包中,包含 ...
- 执行Socket socket = new Socket(ip, port);时抛出个异常:android.os.NetworkOnMainThreadException解决办法
首先,确认你的android版本是4.0之后再用此方法解决,因为在4.0之后在主线程里面执行Http请求才会报这个错,也许是怕Http请求时间太长造成程序假死的情况吧.Android在4.0之前的版本 ...
随机推荐
- 扒站工具Teleport Pro教程
1.下载软件 http://www.jb51.net/softs/44134.html 2.安装 3.界面 先点开帮助点注册(类似于破解要不全站扒不全) 下面请看ppt, http://www.doc ...
- 利用PowerDesigner设计数据库
PowerDesigner非常强大, 可以利用它完成数据库的设计. 1.下载地址:http://pan.baidu.com/s/1DsLrg 2.表设计: 建立概念数据模型(Conceptual Da ...
- 蓝桥杯 算法训练 ALGO-145 4-1打印下述图形
算法训练 4-1打印下述图形 时间限制:1.0s 内存限制:256.0MB 问题描述 使用循环结构打印下述图形,打印行数n由用户输入.打印空格时使用"%s"格式,向pri ...
- canvas路径绘制
惯例,先贴代码: 1 /** 2 * Created by Administrator on 2016/1/27. 3 */ 4 function draw (id){ 5 var canvas = ...
- Mongodb 副本集的节点详细操作
副本集操作 官方文档:https://docs.mongodb.com/v3.2/reference/method/js-replication/ 1 rs.add(){ _id: <int&g ...
- UE4材质初探
转自:http://www.unrealchina.net/portal.php?mod=view&aid=233 UE4的材质表面上看起来很简单,可是到了用的时候却总是没有办法实现好的效果. ...
- HtmlHelper(辅助产生HTML之用)
弱类型: 1.使用HTML辅助方法输出超链接 (1)在View中输出ASP.NET MVC的超链接通常会用Html.ActionLink辅助方法,该方法用于产生文字链接,其文字部分会自动进行HTML编 ...
- javascript——对象的概念——Object(未完)
http://www.blogjava.net/zkjbeyond/archive/2006/04/16/41336.html javascript中对象只包括属性和方法两种成员.ECMA-262 把 ...
- 11-09SQLserver 基础-数据库之汇总练习45题
设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1-2的表 ...
- CALayer的基本使用
CALayer需要导入这个框架:#import <QuartzCore/QuartzCore.h> 一.CALayer常用属性 属性 说明 是否支持隐式动画 anchorPoint 和中心 ...