Socket通讯简易学习
Socket打开通信通道,告诉本地机器,愿意在该通道上接受客户请求——监听,等待客户请求——接受请求,创建专用链接进行读写——处理完毕,关闭专用链接——关闭通信通道(当然其中监听到关闭专用链接可以重复循环)
Ø 客户端:打开通信通道,连接服务器——数据交互——关闭信道。
服务端server代码
try
{
bool types = true;
while (types != false)
{ int port = ; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port); Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket类 s.Bind(ipe);//绑定2000端口 s.Listen();//开始监听 Console.WriteLine("等待与我配对"); Socket temp = s.Accept();//为新建连接创建新的Socket。 Console.WriteLine("正在配对.."); string recvStr = ""; byte[] recvBytes = new byte[]; int bytes; bytes = temp.Receive(recvBytes, recvBytes.Length, );//从客户端接受信息 // recvStr += Encoding.ASCII.GetString(recvBytes, 0, bytes);
//recvStr += Encoding.UTF8.GetString(recvBytes, 0, bytes);
recvStr += Encoding.UTF8.GetString(recvBytes,,bytes); // recvStr+= Encoding.Unicode.GetChars(recvBytes);
Console.WriteLine("配对人跟我讲:{0}", recvStr);//把客户端传来的信息显示出来 string sendStr = "我回配对人说可以配对Ok!Client Send Message Sucessful!"; byte[] bs = Encoding.UTF8.GetBytes(sendStr); temp.Send(bs, bs.Length, );//返回客户端成功信息 temp.Close(); s.Close();
} } catch (ArgumentNullException e)
{ Console.WriteLine("ArgumentNullException: {0}", e);
} catch (SocketException e)
{ Console.WriteLine("SocketException: {0}", e);
} Console.WriteLine("Press Enter to Exit"); Console.ReadLine();
客户端Client代码
try
{ int port = ; string host = "127.0.0.1"; IPAddress ip = IPAddress.Parse(host); IPEndPoint ipe = new IPEndPoint(ip, port);//把ip和端口转化为IPEndPoint实例 Socket c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket Console.WriteLine("正在连接配对..."); c.Connect(ipe);//连接到服务器 string sendStr = "你好,我是hello!This is a socket test";
Encoding.Unicode.GetBytes(sendStr);
// byte[] bs = Encoding.ASCII.GetBytes(sendStr);
byte[] bs = Encoding.UTF8.GetBytes(sendStr); Console.WriteLine("Send Message"); c.Send(bs, bs.Length, );//发送测试信息 string recvStr = ""; byte[] recvBytes = new byte[]; int bytes; bytes = c.Receive(recvBytes, recvBytes.Length, );//从服务器端接受返回信息 recvStr += Encoding.UTF8.GetString(recvBytes, , bytes); Console.WriteLine("客户端接收到服务器说:{0}", recvStr);//显示服务器返回信息 c.Close(); Console.WriteLine("下面开始正常对话……");
bool trys = true; while (trys != false)
{
bs = null;
string pika= Console.ReadLine();
bs= Encoding.UTF8.GetBytes(pika); c = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//创建一个Socket c.Connect(ipe);//连接到服务器
c.Send(bs, bs.Length, );//发送测试信息
string recvStr1 = ""; byte[] recvBytes1 = new byte[]; int bytes1; bytes1 = c.Receive(recvBytes1, recvBytes1.Length, );//从服务器端接受返回信息 recvStr1 += Encoding.UTF8.GetString(recvBytes1, , bytes1); Console.WriteLine("客户端接收到服务器说:{0}", recvStr1);//显示服务器返回信息 c.Close();
} } catch (ArgumentNullException e)
{ Console.WriteLine("ArgumentNullException: {0}", e); } catch (SocketException e)
{ Console.WriteLine("SocketException: {0}", e); } Console.WriteLine("Press Enter to Exit"); Console.ReadLine();
其中有代码Encoding.UTF8
这一块是设置编码,使用Unicode再用中文的时候会发生乱码????类试与这一的,编码服务端跟客户端必须一致,不然也会出现乱码行为,不过咱这一般都用Encoding.UTF8就OK的啦
Socket通讯简易学习的更多相关文章
- c#写个基础的Socket通讯
晚上想写点东西,想想把我刚来公司学的Sockt通讯写上来吧.要写的简单易懂点,新人们可以借鉴下哦,用控制台写. 先得说说Socket,与TCP/UDP啥关系,一直讲什么Socket通讯,TCP通讯,都 ...
- 试解析Tomcat运行原理(一)--- socket通讯
关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...
- c# TCP Socket通讯基础
在做网络通讯方面的程序时,必不可少的是Socket通讯. 那么我们需要有一套既定的,简易的通讯流程. 如下: <pre name="code" class="csh ...
- java socket通讯(一) 入门示例
一.入门 要想学习socket通讯,首先得知道tcp/ip和udp连接,具体可参考浅谈TCP/IP 和 UDP的区别 二.示例 首先新建了一个java工程,包括两个部分,客户端SocketClient ...
- 试解析Tomcat运行原理(一)--- socket通讯(转)
关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使 ...
- 闲来无事,写个基于TCP协议的Socket通讯Demo
.Net Socket通讯可以使用Socket类,也可以使用 TcpClient. TcpListener 和 UdpClient类.我这里使用的是Socket类,Tcp协议. 程序很简单,一个命令行 ...
- Android笔记:Socket通讯常见问题
经验证的socket通讯问题 1.如果是模拟器和本机PC直接通讯,需要使用本机IP地址 而不是 10.0.2.2 如本机的静态地址为192.168.1.2 则直接使用该地址 2.接收和连接代码不能在 ...
- java socket通讯(二)处理多个客户端连接
通过java socket通讯(一) 入门示例,就可以实现服务端和客户端的socket通讯,但是上一个例子只能实现一个服务端和一个客户端之间的通讯,如果有多个客户端连接服务端,则需要通过多线程技术来实 ...
- Socket网络通讯开发总结之:Java 与 C进行Socket通讯 + [备忘] Java和C之间的通讯
Socket网络通讯开发总结之:Java 与 C进行Socket通讯 http://blog.sina.com.cn/s/blog_55934df80100i55l.html (2010-04-08 ...
随机推荐
- JSONObject put List<Double> 后转化为String问题的解决办法
//原代码 JSONObject powerCurveJsonObj = new JSONObject(); powerCurveJsonObj.put("test",[0.5, ...
- 洛谷 - P1020 - 导弹拦截 - 最长上升子序列
https://www.luogu.org/problemnew/show/P1020 终于搞明白了.根据某定理,最少需要的防御系统的数量就是最长上升子序列的数量. 呵呵手写二分果然功能很多,想清楚自 ...
- HDU4247【瞎搞】
题意: 给你4个小正方形的边长,让你求一个最小大正方形的边长以至于可以存这么四个正方形. 思路: 比划了一下...就是最大边+次大边,因为他们一定有交集. #include <cstdio> ...
- Shader第二十八讲 Compute Shaders
http://blog.sina.com.cn/s/blog_471132920102w97k.html 首先简单介绍GPGPU programming 和CPU Random Memory Acce ...
- 浅谈C++中内存泄漏的检测
首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复.最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck,功能非常强大,相信做C++开发的人 ...
- WindApi2 , WindOriginalApiLibrary 突然不兼容问题
1. 在新的电脑上从tfs拉下代码后编译, windoriginalapilibrary 这个工程弹出对话框,要求转为vs2013编译,选择同意,编译成功 2.WindApi2 的Reference列 ...
- 基于nginx的配置网站密码认证
在nginx配置服务中,创建访问网站密码认证. 1)需要ngx_http_auth_basic_module模块 语法: Syntax: auth_basic string | off; Defaul ...
- Android近场通信---NFC基础(四)(转)
转自http://blog.csdn.net/think_soft/article/details/8184539 从Intent中获取信息 如果因为NFC的Intent而启动一个Activity,那 ...
- SQL COUNT DISTINCT 函数
定义和用法 可以一同使用 DISTINCT 和 COUNT 关键词,来计算非重复结果的数目. 语法 SELECT COUNT(DISTINCT column(s)) FROM table 例子 注意: ...
- salt命令
salt-key -L list在master上所有收到的公钥连接请求 -A accept所有pending的请求. -D 删除所有 在minion上启动服务后,几十秒后会在/etc/salt/pki ...