TCP/IP网络通信-数据传输
1.通过网络IP实现数据的传输。
2.服务器端代码 【 服务端主要通过Socket类来创建一个监听等待客户端连接,服务端发送用send方法,接收用Receive方法】
using System.Net.Sockets;
using System.IO;
using System.Net; private void Waek_Load(object sender, EventArgs e)
{
//打开Listener开始监听
Thread thrListener = new Thread(new ThreadStart(Listen));
thrListener.Start();
}
//监听数据
private static Encoding encode = Encoding.Default;
private void Listen()
{
Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listenSocket.Bind(new IPEndPoint(IPAddress.Any, 10000));//获取服务器IP,和设置一个端口号
listenSocket.Listen(100);
Socket acceptSocket = listenSocket.Accept();//一直等待,直到有客户端连入
while (true)//客户端连入才会到循环。
{
try
{
string receiveData = Receive(acceptSocket, 5000); //5 seconds timeout.
if (receiveData != "")
{
//接收客户端发送的数据
Invoke((EventHandler)delegate { label5.Text = receiveData; });
//给客户端回复数据
acceptSocket.Send(encode.GetBytes("ok+00 00 01 02 03"));
}
}
catch (Exception ex) {
} }
}
/// <summary>
/// 接收数据
/// </summary>
/// <param name="socket"></param>
/// <param name="timeout"></param>
/// <returns></returns>
private static string Receive(Socket socket, int timeout)
{
string result = string.Empty;
socket.ReceiveTimeout = timeout;
List<byte> data = new List<byte>();
byte[] buffer = new byte[1024];
int length = 0;
try
{
while ((length = socket.Receive(buffer)) > 0)
{
for (int j = 0; j < length; j++)
{
data.Add(buffer[j]);
}
if (length < buffer.Length)
{
break;
}
}
}
catch { }
if (data.Count > 0)
{
result = encode.GetString(data.ToArray(), 0, data.Count);
}
return result;
}
/// <summary>
/// 销毁Socket对象
/// </summary>
/// <param name="socket"></param>
private static void DestroySocket(Socket socket)
{
if (socket.Connected)
{
socket.Shutdown(SocketShutdown.Both);
}
socket.Close();
}
3.客户端代码【客户端端主要通过TcpClient类去连接服务端 将连接好的对象赋值给NetworkStream类来发送和接收数据 接收用Read()方法,发送用Wirte()方法】
NetworkStream ntwStream = null;
TcpClient tcpClient = null;
private void Form1_Load(object sender, EventArgs e)
{
tcpClient = new TcpClient();
tcpClient.Connect(System.Net.IPAddress.Parse("172.17.100.97"), 10000);//设置链接到的服务器地址及端口
ntwStream = tcpClient.GetStream();//开始链接
// 打印连接到的服务端信息
label1.Text = string.Format("已经成功与客户端建立连接!{0} --> {1}", tcpClient.Client.LocalEndPoint, tcpClient.Client.RemoteEndPoint);
//启动接收服务器发送来的数据
Thread thrListener = new Thread(new ThreadStart(Listen));
thrListener.Start();
}
//监听数据
private static Encoding encode = Encoding.Default;
private void Listen()
{
while (true)
{
try
{
byte[] buffer = new byte[1024];
int receiveData = ntwStream.Read(buffer, 0, buffer.Length);
int length = 0;
if (receiveData != 0)
{
List<byte> data = new List<byte>();
length = buffer.Length;
for (int j = 0; j < length; j++)
{
data.Add(buffer[j]);
}
string result = encode.GetString(data.ToArray(), 0, data.Count);
Invoke((EventHandler)delegate { textBox2.Text = result.ToString(); });
}
}
catch (Exception ex)
{
} }
}
//客户端往服务器写入数据
private void button1_Click(object sender, EventArgs e)
{
if (ntwStream.CanWrite)
{
Byte[] bytSend = Encoding.UTF8.GetBytes(textBox1.Text);
ntwStream.Write(bytSend, 0, bytSend.Length);
}
else
{
Console.WriteLine("无法写入数据流");
ntwStream.Close();
tcpClient.Close();
return;
}
}
//截图


TCP/IP网络通信-数据传输的更多相关文章
- 关于TCP/IP与数据传输
一.TCP/IP的具体含义: 从字面意思来讲,很多人会认为TCP/IP是指TCP与IP这两种协议.有时确实也可以说是这两种协议,但是大部分情况下所说的是利用IP进行通信时所必须用到的协议群的统称.具体 ...
- QT从入门到入土(九)——TCP/IP网络通信(以及文件传输)
引言 TCP/IP通信(即SOCKET通信)是通过网线将服务器Server端和客户机Client端进行连接,在遵循ISO/OSI模型的四层层级构架的基础上通过TCP/IP协议建立的通讯.控制器可以设置 ...
- Winsock API TCP/IP网络通信
通信流程如下: 1.Winsock库的装入.初始化 #pragma comment(lib,"WS2_32.lib").WSAStartup() 2.套接字的创建(服务器端是监听套 ...
- TCP/IP协议基础(转)
转自 http://www.chinaunix.net 作者:Bernardus160 发表于:2003-12-03 17:33:15 TCP/IP协议基础 -------------------- ...
- TCP/IP网络编程之socket交互流程
一.概要 本篇文章主要讲解基于.net中tcp/ip网络通信编程.在自我进步的过程中记录这些内容,方便自己记忆的同时也希望可以帮助到大家.技术的进步源自于分享和不断的自我突破. 技术交流QQ群:580 ...
- TCP/IP的Socket编程
1. TCP/IP.UDP的基本概念 TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,他是一个工业标准的协议集, ...
- TCP/IP远程访问操作:rwho,rlogin,rcp和rsh
TCP/IP网络通信 软件 包使用远程访问 的 命令 ,这些命令首先是由UC Berkely为Arpanet开发的.它允许您远程注册到另一个 系统 中,并从一个系统复制文件到另一个系统.您能取得关于一 ...
- http和tcp/ip,socket的区别
http协议和tcp/ip协议乍看起来,感觉是同一类的东西,其实不然,下面简单的说说他们的区别. http协议是应用层的一种数据封装协议,类似的还有ftp,telnet等等,而tcp/ip是数据传输层 ...
- TCP/IP网络编程之字节序和网络字节序
一.概要 本篇文章主要讲解基于.net中tcp/ip网络通信编程中的网络字节序.在自我进步的过程中记录这些内容,方便自己记忆的同时也希望可以帮助到大家.技术的进步源自于分享和不断的自我突破. 技术交流 ...
随机推荐
- 如何在Django模型中管理并发性 orm select_for_update
如何在Django模型中管理并发性 为单用户服务的桌面系统的日子已经过去了 - 网络应用程序现在正在为数百万用户提供服务,许多用户出现了广泛的新问题 - 并发问题. 在本文中,我将介绍在Django模 ...
- Maven——依赖
一.依赖的范围 依赖的范围有几个可选值,我们用得到的是:compile.test.provided 三个. [1]从项目结构角度理解 compile 和 test 的区别 [2]从开发和运行这两个不同 ...
- 编写高质量代码改善C#程序的157个建议——建议56:使用继承ISerializable接口更灵活地控制序列化过程
建议56:使用继承ISerializable接口更灵活地控制序列化过程 接口ISerializable的意义在于,如果特性Serializable,以及与其像配套的OnDeserializedAttr ...
- XE StringGrid应用(G1属性触发G2)
unit UnitMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System. ...
- 命令(Command)模式
命令(Command)模式:命令模式是对命令的封装.命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象 /* * 客户(Client)角色:创建了一个具体命令(ConcreteComma ...
- .net Stream篇(五)
MemoryStream 目录: 1 简单介绍一下MemoryStream 2 MemoryStream和FileStream的区别 3 通过部分源码深入了解下MemoryStream 4 分析Mem ...
- java代码实现顺序队列
java实现顺序队列 package xianxinTable; import java.util.ArrayList; import java.util.Iterator; import com.s ...
- 关于使用idea的一些小技巧
1:idea与git同步以后查看修改变化: file --setting--versioncontorller
- centos7 .net core 使用supervisor守护进程,可以后台运行
1.安装supervisor yum install supervisor 2.配置supervisor vi /etc/supervisord.conf 拉到最后,这里的意思是 /etc/super ...
- 861. Score After Flipping Matrix
We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...