C#网络编程日记2
来源:互联网 发布:苹果数据开关快捷键 编辑:程序博客网 时间:2024/05/29 19:57
一,tcp协议
Tcp程序有服务器端和可客户端,服务器端通常在一个众所周知的地址监听对服务的请求,就是说服务器处于休眠状态,知道客户端对服务器提出了连接请求。
Server端程序执行步骤如下:
1.打开一个通信通道,并告知本地主机,他愿意在某一地址和端口上接收客户连接请求。
2.等待客户请求到达该端口。
3.接收到重复服务请求,处理该请求并发出应答信号。接收到并发服务请求,激活一个新的进程或者线程来处理这个客户请求。新进程或者线程处理此客户请求,并不需要对其他请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。
4.返回第二步,等待另一客户请求。
5.关闭服务器。
Client端程序执行步骤如下:
1.打开一个通信通道,并连接到服务器所在主机的特定端口。
2.向服务器发服务请求报文,等待并接受应答,继续提出请求。
3.请求结束后关闭通信通道并终止。
套接字工作原理:
1.服务器套接字监听全网
2.客户端套接字向服务端套接字发出连接请求。
3.当服务器端监听到客户端套接字的连接请求时,他就响应客户端套接字请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一点客户端确认了此描述,连接就建立好了。而服务器端始终处于监听状态,继续接受其他客户端套接字的连接请求。
使用socket实现tcp程序:
服务器端:
public Form1() { InitializeComponent(); //IPAddress监听所有地址 IPEndPoint localIPEndPoint = new IPEndPoint(IPAddress.Any, 6001); Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Bind(localIPEndPoint); serverSocket.Listen(10); while (true) { //在accept处等待客户端的connect clientSocket = serverSocket.Accept(); Thread receiveThread = new Thread(receiveData); receiveThread.Start(); Thread sendThread = new Thread(sendData); sendThread.Start(); } } private void sendData() { byte[] buffer = new byte[2]; buffer = Encoding.UTF8.GetBytes("owen"); clientSocket.Send(buffer,buffer.Length,SocketFlags.None); } private void receiveData() { byte[] buffer = new byte[2048]; //在receive处等待客户端发送信息过来 int len = clientSocket.Receive(buffer); string message = Encoding.UTF8.GetString(buffer,0,len); }
客户端:
private Socket clientSocket; public Form1() { InitializeComponent(); //这里的ipEndPoint是服务器端的ip和port IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("10.131.38.79"),6001); clientSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); //connect用于发起连接客户端 clientSocket.Connect(ipEndPoint); Thread receiveThread = new Thread(receiveData); receiveThread.Start(); Thread sendThread = new Thread(sendData); sendThread.Start(); } private void sendData() { //当这里发送了信息,服务端的receiveData就能接收信息 byte[] buffer = new byte[2048]; buffer = Encoding.UTF8.GetBytes("welcome"); clientSocket.Send(buffer, buffer.Length, SocketFlags.None); } private void receiveData() { byte[] buffer = new byte[2048]; int len = clientSocket.Receive(buffer); string message = Encoding.UTF8.GetString(buffer, 0, len); }
另一种简便的Tcp编程方法——TcpListener和TcpClient
服务器端:
private NetworkStream netStream; private TcpClient tcpClient; private BinaryReader reader; public Form1() { InitializeComponent(); TcpListener tcpListener = new TcpListener(IPAddress.Any, 13000); tcpListener.Start(); while(true) { tcpClient = tcpListener.AcceptTcpClient(); Thread receiveThread = new Thread(receiveData); receiveThread.Start(); //Thread sendThread = new Thread(sendData); //sendThread.Start(); } } private void receiveData() { netStream = tcpClient.GetStream(); reader = new BinaryReader(netStream); string receivemessage = reader.ReadString(); Console.WriteLine("message ="+receivemessage); }
客户端:
private TcpClient tcpClient; private NetworkStream netStream; private BinaryWriter writer; public Form1() { InitializeComponent(); tcpClient = new TcpClient(); tcpClient.Connect(IPAddress.Parse("10.131.38.79"), 13000); Thread sendThread = new Thread(sendData); sendThread.Start(); } private void sendData() { netStream = tcpClient.GetStream(); writer = new BinaryWriter(netStream); writer.Write("welcome"); }
- C#网络编程日记2
- C#网络编程日记1
- C#网络编程日记3
- C#网络编程日记4
- C#网络编程日记5
- Unix网络编程学习日记 (2)
- 网络编程之编程日记
- 网络编程学习日记 (1)
- Unix网络编程学习日记
- 黑马程序员-学习日记18(网络编程 2 )
- C#日记2--Gridview
- 网络编程日记(4-01-03)
- 黑马程序员 网络编程学习日记
- 黑马程序员日记8----网络编程
- 黑马程序员_日记03(网络编程)
- java自学日记6(网络编程)
- Java学习日记(十一)网络编程
- 黑马程序员学习日记--网络编程
- mysql数据库导出xml文件
- 在C# winform程序中直接执行javascript,调用javascript方法
- MC新手入门(二十六)------屏幕适配
- android学习笔记点滴
- 实现JSP论坛树型结构的具体算法
- C#网络编程日记2
- 常用SQL语句总结
- Android xml资源文件中@、@android:type、@*、?、@+含义和区别
- asp.net网站在Win2008x64系统下连接oralce的设置
- 解决无法添加Activex控件变量的错误
- MC新手入门(二十七)------数据类型、标识符、常量与变量
- 对话框上的控件的大小和位置随着对话框的大小的改变而变化
- uboot 中内存测试,内存检测方法
- JS自带函数