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 ...
随机推荐
- Fitnesse 访问日志配置
1. 在build.xml中修改Finesse运行时的参数 <target name="run" depends="compile, compile-bootstr ...
- mysql order by是怎么工作的?
假设我们要查询一个市民表中城市=杭州的所有人的名字,并且按照名字排序 CREATE TABLE `t` ( `id` ) NOT NULL, `city` ) NOT NULL, `name` ) N ...
- JAVA实训总结 :String
String是特殊的类,与其他基本类型并不相同,是被java封装的类型 String底层组成对象为数组与字典(字符集编码表) String 类型的字符串是存储在JVM特别开辟的字符串常量池中 创建 ...
- python之文件路径截取 & endswith()
文件路径截取: >>> import os >>> path = '/etc/singfor/passwd/sunny/test.log' >>> ...
- JSP | 基础 | 中文字符的传递
设置传递格式: request.setCharacterEncoding("utf-8"); 中文字符解码: import java.net.URLDecoder; String ...
- Zynq7000开发系列-1(Vivado HLx 2016.4下载及安装)
一.下载 1.访问Xilinx官方网站:www.xilinx.com,注册帐号并完善个人信息 2.点击以下选项进入下载页面:Support -> Downloads & Licensin ...
- scrapy分布式原理
scrapy分布式原理 关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键 ...
- B.出题人的女装
链接:https://ac.nowcoder.com/acm/contest/358/B 题意: 出题人早上起床就打算穿衣服,他有两箱衣服,因为懒,他在这两天只打算打开一个箱子. 两个箱子中一个有n件 ...
- Gym 101149I I - It's the Police
http://codeforces.com/gym/101149/problem/I 考虑下面这个例子 4 3 1 2 1 3 1 4 应该是选 0 0 1 1这样是最优的,我们不选1号,因为如果选1 ...
- 使用openssl 生成免费证书
阅读目录 一:什么是openssl? 它的作用是?应用场景是什么? 二:使用openssl生成免费证书 回到顶部 一:什么是openssl? 它的作用是?应用场景是什么? 即百度百科说:openssl ...