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人 ...
随机推荐
- Gengxin讲STL系列——Queue和Stack
第三篇. 感觉队列和栈是必须的……所以决定加上这两个…… 我发现我已经买域名买上隐了……今天又买了个.top……真是智障…… Queue(队列FIFO)和Statk(栈LIFO). 那么为什么要这两个 ...
- PHP 中 const define 的区别
在php中定义常量时,可用到const与define这两种方法,那他们到底有什么区别呢? 1.const用于类成员变量的定义,一经定义,不可修改.define不可用于类成员变量的定义,可用于全局常量. ...
- python运维开发(十七)----jQuery续(示例)web框架django
内容目录: jQuery示例 前端插件 web框架 Django框架 jQuery示例 dom事件绑定,dom绑定在form表单提交按钮地方都会绑定一个onclick事件,所有查看网站的人都能看到代码 ...
- @Scheduled(cron="") spring定时任务时间设置
一个cron表达式有至少6个(也可能7个)有空格分隔的时间元素. 按顺序依次为 秒(0~59) 分钟(0~59) 小时(0~23) 天(月)(0~31,但是你需要考虑你月的天数) 月(0~11) 天( ...
- SIM卡尺寸及剪卡教程
手机SIM卡有全尺寸SIM卡.Mini-SIM卡.Micro-SIM卡.Nano-SIM卡.Embedded-SIM卡等类型,目前主流手机基本都是趋向使用Micro-SIM卡和Nano-SM卡. 一. ...
- C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示
本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...
- 转:基础总结篇之一:Activity生命周期
熟悉javaEE的朋友们都了解servlet技术,我们想要实现一个自己的servlet,需要继承相应的基类,重写它的方法,这些方法会在合适的时间被servlet容器调用.其实android中的Acti ...
- Python基础教程学习(四)类的创建与继承
类中可以有方法,类外也可以有函数,其实类就是一种封装, Python中可以自己定义一个函数,一可以把这个函数在类中封装成一个方法, 其中的属性和方法自然就从父类中继承来了, 要想获得多个类的属性和功能 ...
- PHP - 多维数组
多维数组指的是包含一个或多个数组的数组. PHP 能理解两.三.四或五级甚至更多级的多维数组.不过,超过三级深的数组对于大多数人难于管理. 注释:数组的维度指示您需要选择元素的索引数. 对于二维数组, ...
- php php打乱数组二维数组、多维数组
php中的shuffle函数只能打乱一维数组,有什么办法快速便捷的打乱多维数组?手册上提供了 <?php function shuffle_assoc($list) { if (!is ...