第一个socket

学习网络通信的第一个程序

声明:此博客只是学习笔记,可能有错误,有一个bug,server程序不可移动

参考资料:老师上课使用ppt

题目要求:

1.语言c#

2.设计一个基于socket和TCP协议的简易数据应答程序。

3.用户界面采用图形用户界面

4.通信的双方都为本机

5.具体功能:建立程序,实现两个程序之间的数据交换,即客户端和服务端,将客户端输入的字母变为大写字母;

服务器端程序自动响应客户端程序的输入,将客户端输入的字符数据转换为大写后返回给客户端。

 

实现的步骤:

首先解释为何使用c#语言

--C#用于网络通信的库是Windows.Net,它包含了多个用于各种标准网络协议通信的类和接口。还有其他有用的库:system.Net.sockets,system.IO

分为两个部分:客户端和服务端

客户端:

1、设置待连接服务器的ip地址和端口:此处用textbox 中的内容指定,但是注意,textbox中是string形式,而我们要用的TcpClient类进行连接,需要用到int形式,所以可以用 int.Parse(textBox2.Text),将数字的字符串表示形式转换成它的等效32位有符号整数。

TcpClient类为TCP网络提供客户端连接。常用于客户端程序连接服务器。
eg. TcpClient myclient = new TcpClient("localhost", 5000);
如果连接不成功,则抛出一个错误。

2、服务器端和客服端连接,此处两方都为主机,所以要先启动服务器端再用客户端,设置一个bool型变量flag判断是否是连接,为了增强封装性,所以可以设置一个connect函数,使其连接。

Try-catch 语句包含一个后接一个或多个 catch 子句的 try 块,这些子句指定不同异常的处理程序。
引发异常时,公共语言运行时 (CLR) 查找处理此异常的 catch 语句。如果当前正在执行的方法不包含此类 catch 块,则 CLR 查看调用了当前方法的方法,并以此类推遍历调用堆栈。如果未找到任何 catch 块,则 CLR 向用户显示一条未处理的异常消息,并停止执行程序。
try 块包含可能导致异常的受保护的代码。将执行此块,直至引发异常或其成功完成。

其中还使用了Dns类

DNS指的是将域名或主机名解析为ip地址的服务器。在Socket编程中,常用于域名、主机名与ip地址转换,
Dns.GetHostEntry()//返回主机
Dns.GetHostName()//获得本地主机名
IPHostEntry aa = Dns.GetHostEntry(IPAddress.Parse("192.168.248.14"));
string aa = Dns.GetHostName();

设置string变量totaltext包含所有要输出的内容

3、设置showMessage函数,显示totaltext

4、连接后,利用NetworkStream类

NetworkStream类提供网络访问的基础数据流。

networkStream = myClient.GetStream();

streamReader = new StreamReader(networkStream);

 streamWriter = new StreamWriter(networkStream);

5、循环判断Socket对象是否接收到数据,如果接收到数据,则读取数据至内存,并显示。将内存中数据转换为大写,返回至客户端。

点击button2获得此功能

textbox4中的文字即为要通讯的文字,先判断是否为空

--空,则重新输入

--不空,利用streamwriter--writeline实现从NetworkStream中写入数据,也就是客户端向服务器发送数据,读取textbox4中text。

设置一个变量s储存text,加到totaltext中,显示,清除缓冲区。

s=“”--StreamReader对象可以实现从NetworkStream中读取数据,也就是客户端读取服务器的数据,显示。

 

服务器端:

1、获得本机的ip地址(127.0.0.1或者内网地址),其中利用IPaddress类

用于提供网际协议 (IP) 地址。
可以将字符串类型的IP地址转换为IPaddress类的对象,或将localhost之类的地址转换为Ipaddress类对象:

ipAddress = Dns.Resolve("localhost").AddressList[0];

     textBox1.Text=ipAddress.ToString();将internet地址转化为标准表示法

2、设置一个端口,供服务器程序进行监听(5000)


3、用IPEndPoint对象绑定ip地址和端口

IPEndPoint ipe = new IPEndPoint(ipAddress, 5000);
4、用TcpListener对象启动监听,并将监听结果返回至Socket对象。

         TcpListener实现对网络地址和网络端口的侦听
TcpListener(IPEndPoint) 使用指定的本地终结点初始化 TcpListener 类的新实例。
TcpListener(IPAddress, Int32) 初始化TcpListener 类的新实例,该类在指定的本地 IP 地址和端口号上侦听是否有传入的连接尝试  

tcpListener = new TcpListener(ipe);//是sockets中的
tcpListener.Start();

5、用NetworkStream对象建立服务器端和客户端数据的交换。

NetworkStream类常与StreamReader、StreamWriter类配合使用,以完成通讯双方数据的交换。
用NetworkStream类建立与客户端的数据流交换, StreamReader对象可以实现从NetworkStream中读取数据,也就是服务器读取客户端的数据;反之, StreamWriter对象可以实现从NetworkStream中写入数据,也就是服务器向客户端发送数据

6、循环判断Socket对象是否接收到数据,如果接收到数据,则读取数据至内存,并显示。将内存中数据转换为大写,返回至客户端。

line.ToUpper()实现大小写的转换

清除缓冲区

此处还利用了    Application.DoEvents();

Application.DoEvents()的作用:处理所有的当前在消息队列中的Windows消息。同步进行??

关闭套接字

具体代码见附件,已运行成功(...一直没有更新...)

开发工具:VS2012

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值