c++网络通信(与服务器通信聊天)和c#网络通信
c++网络通信(有待整理)
链接:http://pan.baidu.com/s/1i3nMLKT 密码:ksi8
c#网络通信(tcp/udp两部分)
TCP发送端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Diagnostics;
using System.IO; namespace tcpTest
{
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient("127.0.0.1", );
NetworkStream stream = client.GetStream();
//Byte[] btt = { 126, 12, 21, 32, 13 }; //以十进制的方式给Byte赋值后发送
//Byte[] btt = { 0x7e,0x1c,0x15,0x20,0xd }; //以十六进制的方式给Byte赋值后发送
string data = " 7e 1c 15 20 0d "; //将字符串转换后赋值给Byte再发送
string[] numbers = data.Trim().Split(' ');
List<byte> buffer = new List<byte>();
foreach (string number in numbers)
{
Byte aByte;
aByte = byte.Parse(number,System.Globalization.NumberStyles.AllowHexSpecifier);
buffer.Add(aByte);
}
Byte[] btt = buffer.ToArray();
stream.Write(btt,,btt.Length);
foreach(Byte bt in btt)
Debug.WriteLine(bt.ToString("x"));
client.Close();
stream.Close();
}
}
}
TCP接收端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Net; namespace tcpTest
{
class Program
{
static TcpListener listener;
static Thread thread;
static bool isLoop;
static List<byte> Data = new List<byte>();
static void Main(string[] args)
{
listener = new TcpListener(IPAddress.Parse("127.0.0.1"), );
listener.Start(); //定义、开始监听
isLoop = true;
thread = new Thread(new ThreadStart(BeginListen));
thread.Start();
}
static private void BeginListen()
{
NetworkStream stream; //重点1. 定义 流
while (isLoop)
{
List<byte> data = new List<byte>();
using (TcpClient client = listener.AcceptTcpClient())
{
byte bits;
int read;
stream = client.GetStream();
do
{
read = stream.ReadByte(); //重点2.获取数据字节
if (read != -)
{
bits = byte.Parse(read.ToString("x"), System.Globalization.NumberStyles.AllowHexSpecifier);
data.Add(bits);
}
} while (read != -);
}
if (data[] == 0x7e)
{
Data.Clear();
Data.AddRange(data);
}
else
{
Data.AddRange(data);
}
if (data[data.Count-] == 0x0d)
{
for (int i = ; i < Data.Count;i++ )
{
string value = Data[i].ToString("X");
if (value.Length==)
{
value = "" + value;
}
Console.Write(value);
}
Console.WriteLine("+");
}
}
}
}
}
结果图:
工程文件地址:http://pan.baidu.com/s/1ntIhjGP 密码:7h0z
UDP发送端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets; namespace client
{
class Program
{
static void Main(string[] args)
{
IPAddress HostIP = IPAddress.Parse("127.0.0.1");
IPEndPoint host = new IPEndPoint(HostIP, );
byte[] bytes= {0x1A,0x14,,0x12}; //12转换为16进制就是c
UdpClient uc = new UdpClient();
int i = uc.Send(bytes,bytes.Length, host);
Console.WriteLine(i);
}
}
}
UDP接收端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Diagnostics;
using System.Threading; namespace server
{
class Program
{
static IPAddress ip = IPAddress.Parse("127.0.0.3");
static IPEndPoint receivePoint = new IPEndPoint(ip, );
static void Main(string[] args)
{
Thread ath = new Thread(new ThreadStart(ReceiveData));
ath.Start();
}
static void ReceiveData()
{
UdpClient sv = new UdpClient( );
while (true)
{
try
{
byte[] recData = sv.Receive(ref receivePoint); //receivePoint,获取发数据的地址。之后可以利用此地址回话。
if (recData.Length != )
{
foreach (byte b in recData)
Console.Write(b.ToString("x")+" "); //以16进制的形式展示,没有"x"则显示的是10进制的显示
Console.WriteLine("数据来自于IP:"+receivePoint.Address.ToString()+" 端口:"+receivePoint.Port.ToString()); //不知道端口为什么会变?
}
}
finally
{ }
}
}
}
}
结果截图:
相关:http://my.oschina.net/Tsybius2014/blog/351974
工程文件:链接:http://pan.baidu.com/s/1dDdLTV7 密码:3e8z
一个关于字节的处理:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.Diagnostics;
using System.IO; namespace tcpTest
{
class Program
{
static void Main(string[] args)
{ byte[] bytes = File.ReadAllBytes("C:\\Users\\dell\\Desktop\\1.rar"); //文件到字节
string stringByte = ""; //字节到字符串
foreach (byte by in bytes)
{
stringByte += by.ToString("X")+" " ;
}
//Debug.WriteLine(stringByte); //在此处可以将stringByte存储到数据库中,后续使用的时候在调出
string[] temStr = stringByte.Trim().Split(' '); //字符串到字节
List<byte> listByte = new List<byte>();
foreach (string tem in temStr)
{
Byte aByte;
aByte = byte.Parse(tem, System.Globalization.NumberStyles.AllowHexSpecifier);
listByte.Add(aByte);
}
byte[] backToBytes = listByte.ToArray();
// string stt = System.Text.Encoding.Default.GetString(backToBytes); //字节到对应的编码字符串,注意和上面的区分
// Debug.WriteLine(stt);
// backToBytes = System.Text.Encoding.Default.GetBytes(stt); //字符串到对应的编码字节
File.WriteAllBytes("C:\\Users\\dell\\Desktop\\2.rar", listByte.ToArray());
}
}
}
TCP和UDP的区别:http://www.cnblogs.com/bizhu/archive/2012/05/12/2497493.html
c++网络通信(与服务器通信聊天)和c#网络通信的更多相关文章
- 跨平台网络通信与服务器框架 acl 3.2.0 发布
acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...
- windows phone 8.1开发:socket通信聊天
本例用WPF程序做服务器端,windows phone程序做客户端.我们使用基于UDP协议的Socket通信.更多关于socket信息请查看:http://msdn.microsoft.com/zh- ...
- Android - 传统蓝牙通信聊天
Android -传统蓝牙通信聊天 技术:java+Android4.4+jdk1.8 运行环境:Android4.4.Android7.0 概述 Android 传统蓝牙的使用,包括开关蓝牙.搜索设 ...
- AngularJs 与服务器通信 $http, $q, $resource
$http服务是AngularJS系统自带的,可以用来进行网络通信.获取远程服务器的数据.要记住的是,$http是对浏览器XMLHttpRequest的封装,也就是说,它其实是Ajax. $http( ...
- 跨平台网络通信与服务器框架 acl 3.2.0 发布,acl_cpp 是基于 acl 库的 C++ 库
acl 3.2.0 版本发布了,acl 是 one advanced C/C++ library 的简称,主要包括网络通信库以及服务器框架库等功能,支持 Linux/Windows/Solaris/F ...
- Google Play Store —与google服务器通信时出现问题
机子:MX4 前几天刷完机后出现登录Google Play Store “与google服务器通信时出现问题”,今天试了好几种方法,来总结一下 1.修改最新Hosts文件 2.SmartHosts ...
- Android操作HTTP实现与服务器通信(转)
Android操作HTTP实现与服务器通信 本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方 ...
- vuejs与服务器通信
vuejs与服务器通信 与服务器通信 Vue 实例的原始数据 $data 能直接用 JSON.stringify() 序列化.社区贡献了一个插件 vue-resource,提供一种容易的方式与 RES ...
- 通信服务器群集——跨服务器通信Demo(源码)
对于一些基于TCP Socket的大型C/S应用来说,能进行跨服务器通信可能是一个绕不开的功能性需求.出现这种需求的场景类似于下面描述的这种情况. 假设,我们一台TCP应用服务器能同时承载10000人 ...
随机推荐
- Django 实战 之 搭项目(正在更新)
系统:win10 python版本:python 3.5 工具: pyCharm 3.4 professional 源码来源:https://github.com/ouzhigang/django-o ...
- shell script中的$*和$@
在shell script中,$*和$@都是获取所有的命令行参数,但是这两者在使用的过程中会有细微的差别,差别主要是在有没有使用双引号,即是直接使用$*,$@,还是使用"$*",& ...
- js继承模式
组合继承是js常用的继承模式,指的是将原型链和借用构造函数的技术结合在一起.其中的思想是使用原型链实现原型属性和方法的继承, 而通过借用构造函数实现对属性的继承. 例子: <script> ...
- 【转载】 Searching过程粗略梳理
转载自:http://www.cnblogs.com/huangfox/archive/2012/02/09/2344686.html solr-searching过程分析(一) --searchin ...
- ruby更换为淘宝的源
我们在使用gem更新的时候,经常会为速度抓狂,其实gem默认的源是https://rubygems.org,比较慢众所周至的原因了. 可以将源更换到国内的taobao源 查看当前有的源 gem sou ...
- Flask的session——关于写扩展所学习到的
这两天端午节.趁着端午节没事干,写了个flask的扩展--flask-RedisSession 在flask中使用该扩展可以让你借助redis数据库轻松获得server-side session. 这 ...
- 使用ARM模板部署自动扩展的Linux VMSS(2)
12.准备完了模板文件,我们使用Powershell来创建VMSS for Linux的自动扩展集合,首先登陆到Azure中国的ARM账号: Login-AzureRmAccount -Environ ...
- 如果设置Keil从C代码编译出来的hex文件地址从0x8000开始
和MON51的设置一样,这样作:1.把Startup.a51拷贝到工程目录加入工程,修改125行的 CSEG AT 0 为 CSEG AT 0X8000 ...
- [ ArcGIS Server技术版]如何得到本机上的所有的REST服务?
http://server.arcgisonline.com/ArcGIS/rest/services?f=json得到的字符串 {"currentVersion":10.01,& ...
- Unix/Linux环境C编程入门教程(38) shell命令进阶演示
1.w命令 该命令也可以查看登录当前系统的用户信息.与who命令相比,w命令的功能更强大,它不但可以显示当前有哪些用户登录到系统,还可以显示这些用户正在进行的操作,并给出更加详细和科学的统计数据 ...