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之前的版本 ...
随机推荐
- BZOJ4195:[NOI2015]程序自动分析
浅谈并查集:https://www.cnblogs.com/AKMer/p/10360090.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php? ...
- hl7消息中和时间有关的字段的格式
hl7消息中有许多segment(段)包含时间类型的Field.常用的MSH, EVN, PID中的时间字段及其格式为: 1. MSH-7, Date/time Of Message为yyyyMMdd ...
- java事件练习!!
总结:不晓得怎么跟书上的运行结果显示的...希望标签竖直排列 package com.bc; import java.awt.Color; import java.awt.FlowLayout; im ...
- Struts2中web.xml里面struts-cleanup作用
struts2.1.3之后的版本均不需要配置该过滤器 参考: struts-cleanup作用 升级到struts-2.3.14.3之后涉及的改动以及ActionContextCleanUp,Stru ...
- MySQL 数据库 练习题
一.表关系 请创建如下表,并创建相关约束 二.操作表 1.自行创建测试数据 2.查询“生物”课程比“物理”课程成绩高的所有学生的学号: 3.查询平均成绩大于60分的同学的学号和平均成绩: 4.查询所有 ...
- Celery-4.1 用户指南: Task(任务)
任务是构建 celery 应用的基础块. 任务是可以在任何除可调用对象外的地方创建的一个类.它扮演着双重角色,它定义了一个任务被调用时会发生什么(发送一个消息),以及一个工作单元获取到消息之后将会做什 ...
- 2010.1.1 CLR 无法从 COM 上下文
今天做一个程序,sql操作,但是记录数太多,而且sql语句有复杂,就报了这样的错误: CLR 无法从 COM 上下文 0x645e18 转换为 COM 上下文 0x645f88,这种状态已持续 60 ...
- taskkill /f /t /im processName
/*@echo off */taskkill /f /t /im WINWORD.exetaskkill /f /t /im nginx.exetaskkill /f /t /im w3wp.exet ...
- HotSpotVM创建过程(JNI_CreateJavaVM)详解
来自:<Java Performance>第3章 JVM Overview The HotSpot VM's implementation of the JNI_CreateJavaVM ...
- js对象简单、深度克隆(复制)
javascript的一切实例都是对象,只是对象之间稍有不同,分为原始类型和合成类型.原始类型对象指的是字符串(String).数值(Number).布尔值(Boolean),合成类型对象指的是数组( ...