using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Threading.Tasks;
using
System.Net;
using
System.Net.Sockets;
///
<summary>
///
服务器
///
</summary>
namespace
Lesson2
{
class
Program
{
static
void
Main(
string
[] args)
{
//实例化类对象
Program
program =
new
Program
();
Console
.WriteLine(
"请选择:1 服务器。 2 客户端。"
);
string
input =
Console
.ReadLine();
if
(input ==
"1"
)
{
Console
.WriteLine(
"您的选择是服务器"
);
// MyServer();如果想调用 需要把MyServer();共有静态方法
//调用服务器方法
program.MyServer();
}
if
(input ==
"2"
)
{
Console
.WriteLine(
"您的选择是客户端"
);
//调用客户端方法
program.Clinet();
}
}
///
<summary>
///
服务端
///
</summary>
void
MyServer()
{
//1.创建socket
Socket
socket =
new
Socket
(
AddressFamily
.InterNetwork,
SocketType
.Stream,
ProtocolType
.Tcp);
//2.创建scoket和端口号使用bind方法
//192.168.25.159是自己的地址
IPAddress
ipAddress =
IPAddress
.Parse(
"192.168.XX.XXX"
);
//("192.168.25.81");//("192.168.25.159");
IPEndPoint
ipEndPoint =
new
IPEndPoint
(ipAddress, 10001);
socket.Bind(ipEndPoint);
//3监听该端口号 listen
//监听35个客户端
socket.Listen(35);
//3.1接受来自客户端的请求
byte
[] mybyte =
new
byte
[1024];
try
{
//阻塞的过程
Socket
tempSocket=socket.Accept();
while
(
true
)
{
//接受数据的长度,长度就是dataLength
int
dataLength = tempSocket.Receive(mybyte);
//只取从0开始数据长度的一段信息,data是客户端发来的消息
string
data =
Encoding
.UTF8.GetString(mybyte,0, dataLength);
Console
.WriteLine(
"从客户端发来的消息为:"
+data);
//通用字符集(Universal Character Set) UTF abbr. Unicode转换格式(UCS Transformation Format)
//发送一下数据 编码
byte
[] sendData =
Encoding
.UTF8.GetBytes(
"发送成功"
);
tempSocket.Send(sendData);
}
}
catch
(
Exception
e)
{
Console
.WriteLine(e.Message);
//throw;
}
finally
{
//最后,执行,关闭Socket
socket.Close();
}
}
//客户端
void
Clinet() {
//1.创建socket
Socket
socket =
new
Socket
(
AddressFamily
.InterNetwork,
SocketType
.Stream,
ProtocolType
.Tcp);
//2.使用connect连接制定计算机的端口
//192.168.25.81服务器地址
IPAddress
ipAddress =
IPAddress
.Parse(
"192.168.XX.XXX"
);
IPEndPoint
ipEndPoint =
new
IPEndPoint
(ipAddress, 10001);
socket.Connect(ipEndPoint);
try
{
string
input=
string
.Empty;
while
(input!=
"2"
)
{
//
Console
.WriteLine(
"请输入您要发送的信息"
);
string
msg =
Console
.ReadLine();
//Empty,空的
if
(msg!=
string
.Empty)
//空的时候用双引号“”表示 用null?
{
//3.发送数据
byte
[] sendData =
Encoding
.UTF8.GetBytes(msg);
socket.Send(sendData);
//接受到的数据
byte
[] receiveData =
new
byte
[1024];
int
length = socket.Receive(receiveData);
string
str =
Encoding
.UTF8.GetString(receiveData,0,length);
Console
.WriteLine(str);
}
Console
.WriteLine(
"是否继续:1继续。 2:退出。"
);
input =
Console
.ReadLine();
}
}
catch
(
Exception
e)
{
Console
.WriteLine(e.Message);
}
finally
{
//关闭
socket.Close();
}
}
}
}
socket是TCP/IP协议的API
TCP是数据的介质,Socket是TCP的介质.
随后会更新TCP一对一聊天室;
可爱的双斜杠很多,同学们很好理解的