using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;//Encoding类
using System.Threading.Tasks;
using System.Net.Sockets;
using System.Net;
namespace TCPServer
{
class Program
{
static void Main(string[] args)
{
//Dep:UPD的形式,发散流
Socket server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //TCP的,流不能断
//获取到主机IP地址
//返回指定主机的ip,(获取本机主机的名字)
IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());//一个网卡是一个ip
for (int i = 0; i < ips.Length; i++)
{
Console.WriteLine (ips[i]);
}
//创建ip节点,指定ip地址和端口号
//dns类:提供简单的域名解析功能
IPEndPoint ipendPoint = new IPEndPoint(ips[1],2222);//ip和端口(c#的优点,把ip和端口承兑处理)
//用IPEndPoint对象表示一个特定的ip和端口组成
//127.0.0.1本地ip
server_socket.Bind(ipendPoint);
server_socket.Listen(40);//最大可以监听多少个连接
while (true)
{
//用于存储客户端发送的数据,socket只能使用字节数组传输
byte[]data = new byte[1024];
int recv = 0;//用来记录传输数据字节长度
Console.WriteLine("Wait");
//等待客户端连接,当有客户端连接时,将返回客户端socket
Socket client = server_socket.Accept();//接收请求//用来接收客户端的socket啦,三次握手核心
IPEndPoint clientIP = (IPEndPoint)client.RemoteEndPoint;//获取远程终节点.IPEND继承endPoint
Console.WriteLine("connect with client"+clientIP.Address);
string server_mag = "welcome here";
//把字符串按照中文的编码方式编码成Bytes类型的字节流数组
data = Encoding.ASCII.GetBytes(server_mag);
//发送消息给客户端
client.Send(data, data.Length, SocketFlags.None);
while(true){
data = new byte[1024];
//等待客户端发送消息,返回值为数据长度,参数为承接数据数组
string client_msg = "";
// data = Encoding.ASCII.GetBytes(client_msg);
recv = client.Receive(data);//等待客户端消息
//收到的客户端发来的值的长度,这个data是发过来的真正值,在这头用data接收了
client_msg = Encoding.ASCII.GetString(data,0,recv);
// Encoding.Default.GetString//当前页面的编码形式将字符串转换成字节数组
// Encoding.Default.GetBytes
if (client_msg=="exit")
{
break;
}
//打印消息
Console.WriteLine("client"+client_msg);
Console.WriteLine("请输入:");
server_mag = Console.ReadLine();
Console.WriteLine(server_mag);
data = new byte[1024];
data = Encoding.ASCII.GetBytes(server_mag);
//获取data的长度
client.Send(data,data.Length,SocketFlags.None);//将数据发送到指定的连接Socket
}
Console.WriteLine("Disconnect from"+clientIP.Address);
//关闭连接
server_socket.Close();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace MyClient
{
class Program
{
static void Main(string[] args)
{
Socket client_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// string ip = "192.168.108.101";
string ip = "192.168.108.71";
IPAddress ipAddress = IPAddress.Parse(ip);
IPEndPoint ipEndpoint = new IPEndPoint(ipAddress,2222);
try
{
client_socket.Connect(ipEndpoint);
}
catch (Exception e)
{
Console.WriteLine("faild to connect server");
Console.WriteLine(e.ToString());
}
byte[] data;
int rev;
string msg = "";
while (true)
{
data = new byte[1024];
rev = client_socket.Receive(data);//接到了
msg = Encoding.ASCII.GetString(data,0,rev);
Console.WriteLine(msg+"服务器发送来的");
//输入
Console.WriteLine( "请输入");
msg = Console.ReadLine();
if (msg=="exit")
{
client_socket.Send(data, data.Length, SocketFlags.None);
break;
}
data = new byte[1024];
data = Encoding.ASCII.GetBytes(msg);
//给服务器发送消息
client_socket.Send(data,data.Length,SocketFlags.None);
}
client_socket.Shutdown(SocketShutdown.Both);
client_socket.Close();
}
}
}