基于C#的同步Socket程序(TCP)
2017-12-02 17:10
387 查看
我们来编写一套简单的网络程序,这套网络程序分为客户端和服务端俩部分,客户端发送一行文本给服务器,服务器收到后将文本稍作改动后发回给客户端。
(注意:本程序使用的是TCP协议,并且为同步模式,后续我会再补充异步模式)
1.下图展示了一套基本的Socket通信流程。
2.Socket通信的基本流程具体步骤如下所示:
(1)开启一个连接之前,需要先完成Socket和Bind俩个步骤。Socket是新建一个套接字,Bind指定套接字的IP和端口(客户端在调用Connect时会由系统分配端口,因此可以省去Bind)
(2)服务器通过Listen开启监听,等待客户端接入。
(3)客户端通过Connect连接服务器,服务器通过Accept接收客户端连接。在connect-accept过程中,操作系统将会进行三次握手。
(4)客户端和服务端通过send(),receive()发送和接收数据,操作系统将会完成TCP数据的确认,重发等步骤。
(5)通过close关闭连接,操作系统会进行四次握手。
3.服务端代码如下:
using System;
using System.Net;
using System.Net.Sockets;
namespace SyncTCPServer
{
class MainClass
{
public static void Main (string[] args)
{
//socket
Socket listenfd = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//bind
//本机的ip地址和端口号
IPAddress ipAdr = IPAddress.Parse ("127.0.0.1");
IPEndPoint ipEp = new IPEndPoint (ipAdr, 1234);
listenfd.Bind (ipEp);
//Listen
listenfd.Listen(0);
Console.WriteLine ("[服务器]启动成功");
while (true) {
//Accept
Socket connfd = listenfd.Accept ();
Console.WriteLine ("[服务器]Accept");
//Recv
byte[] readBuff = new byte[1024];
int count = connfd.Receive (readBuff);
string str = System.Text.Encoding.UTF8.GetString (readBuff, 0, count);
Console.WriteLine ("[服务器接收]" + str);
//Send
byte[] bytes = System.Text.Encoding.Default.GetBytes ("serv echo:" + str);
connfd.Send (bytes);
}
}
}
}4.客户端代码如下:
using System;
using System.Net;
using System.Net.Sockets;
namespace SyncTCPClient
{
class MainClass
{
public static void Main (string[] args)
{
//Socket
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Console.WriteLine (socket.LocalEndPoint);
//Connect
//要连接的服务器的ip地址与端口号
IPAddress ipAdr=IPAddress.Parse("127.0.0.1");
IPEndPoint ipEp = new IPEndPoint (ipAdr, 1234);
socket.Connect (ipEp);
//Send
string str = "Hello World";
byte[] bytes = System.Text.Encoding.Default.GetBytes (str);
socket.Send (bytes);
//Recv
byte[] readBuff=new byte[1024];
int count=socket.Receive(readBuff);
str = System.Text.Encoding.UTF8.GetString (readBuff,0,count);
Console.WriteLine (str);
//Close
socket.Close();
Console.Read ();
}
}
}5.运行结果如下:
(注意:本程序使用的是TCP协议,并且为同步模式,后续我会再补充异步模式)
1.下图展示了一套基本的Socket通信流程。
2.Socket通信的基本流程具体步骤如下所示:
(1)开启一个连接之前,需要先完成Socket和Bind俩个步骤。Socket是新建一个套接字,Bind指定套接字的IP和端口(客户端在调用Connect时会由系统分配端口,因此可以省去Bind)
(2)服务器通过Listen开启监听,等待客户端接入。
(3)客户端通过Connect连接服务器,服务器通过Accept接收客户端连接。在connect-accept过程中,操作系统将会进行三次握手。
(4)客户端和服务端通过send(),receive()发送和接收数据,操作系统将会完成TCP数据的确认,重发等步骤。
(5)通过close关闭连接,操作系统会进行四次握手。
3.服务端代码如下:
using System;
using System.Net;
using System.Net.Sockets;
namespace SyncTCPServer
{
class MainClass
{
public static void Main (string[] args)
{
//socket
Socket listenfd = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//bind
//本机的ip地址和端口号
IPAddress ipAdr = IPAddress.Parse ("127.0.0.1");
IPEndPoint ipEp = new IPEndPoint (ipAdr, 1234);
listenfd.Bind (ipEp);
//Listen
listenfd.Listen(0);
Console.WriteLine ("[服务器]启动成功");
while (true) {
//Accept
Socket connfd = listenfd.Accept ();
Console.WriteLine ("[服务器]Accept");
//Recv
byte[] readBuff = new byte[1024];
int count = connfd.Receive (readBuff);
string str = System.Text.Encoding.UTF8.GetString (readBuff, 0, count);
Console.WriteLine ("[服务器接收]" + str);
//Send
byte[] bytes = System.Text.Encoding.Default.GetBytes ("serv echo:" + str);
connfd.Send (bytes);
}
}
}
}4.客户端代码如下:
using System;
using System.Net;
using System.Net.Sockets;
namespace SyncTCPClient
{
class MainClass
{
public static void Main (string[] args)
{
//Socket
Socket socket=new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Console.WriteLine (socket.LocalEndPoint);
//Connect
//要连接的服务器的ip地址与端口号
IPAddress ipAdr=IPAddress.Parse("127.0.0.1");
IPEndPoint ipEp = new IPEndPoint (ipAdr, 1234);
socket.Connect (ipEp);
//Send
string str = "Hello World";
byte[] bytes = System.Text.Encoding.Default.GetBytes (str);
socket.Send (bytes);
//Recv
byte[] readBuff=new byte[1024];
int count=socket.Receive(readBuff);
str = System.Text.Encoding.UTF8.GetString (readBuff,0,count);
Console.WriteLine (str);
//Close
socket.Close();
Console.Read ();
}
}
}5.运行结果如下:
相关文章推荐
- 基于C#的异步Socket程序(TCP)
- 基于C#的socket编程的TCP同步实现
- 【转载】基于C#的socket编程的TCP同步实现
- 基于C#的Socket同步和异步通信(TCP/UDP)【入门推荐】
- 基于C#的socket编程的TCP同步实现
- 基于tcp的socket通信程序
- C++基于socket的单线程服务器客户端聊天程序(TCP)
- 基于C#的socket编程的TCP异步实现
- C#的Socket程序(TCP)
- Java基于Tcp的socket聊天程序
- 基于C#的socket编程的TCP异步实现
- VC面向对象的方式 写一个基于TCP的 客户端服务端程序 (SOCKET)
- 基于C#的socket编程的TCP异步实现
- 基于TCP的socket程序
- 基于socket的tcp回射服务器的小程序——Linux
- 利用TCP和UDP协议,实现基于Socket的小聊天程序(初级版)
- C#的Socket程序(TCP)(转载)
- 基于Linux的SOCKET编程之TCP半双工Client-Server聊天程序
- C# 的TCP Socket (同步方式)
- 基于C#的Socket编程的TCP异步实现