이 기사는 C# 소켓의 간단한 콘솔 사례를 주로 공유하며 관심 있는 친구는 참고할 수 있습니다.
1. 서버 측
1. 소켓 인스턴스 객체를 인스턴스화하고 설정합니다
a. IP 주소와 포트를 생성합니다
b. 수신 주소 바인딩
c. 동시 접근 허용 횟수 설정
2. 연결 모니터링
a. 메인 스레드가 정지되지 않도록 실행(스레드 시작, 매개변수는 객체 유형이어야 함)
b. 루프를 사용하여 연결을 기다리고 통신을 담당하는 소켓 인스턴스를 반환합니다.
c. 연결된 고객 서비스의 IP 주소는 반환된 소켓 인스턴스에서 얻을 수 있습니다
3. 고객 서비스에서 보낸 메시지를 받습니다
a.
을 실행하기 위해 청취 메소드에서 새 스레드를 시작합니다. b. 메시지를 얻기 위해 메소드를 호출할 때 루프를 사용하여 바이트 변수 매개변수를 전달해야 합니다. 컨테이너로. 메서드의 반환 값은 int이며, 획득한 유효한 바이트 수를 나타냅니다.
c. 유효한 바이트 수가 0이면 루프에서 빠져나옵니다
d. 고객센터
4. 콘솔 프로그램 서버측 코드
using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; namespace ServerSocket { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Any; IPEndPoint point = new IPEndPoint(ip, 2333); //socket绑定监听地址 serverSocket.Bind(point); Console.WriteLine("Listen Success"); //设置同时连接个数 serverSocket.Listen(10); //利用线程后台执行监听,否则程序会假死 Thread thread = new Thread(Listen); thread.IsBackground = true; thread.Start(serverSocket); Console.Read(); } /// <summary> /// 监听连接 /// </summary> /// <param name="o"></param> static void Listen(object o) { var serverSocket = o as Socket; while (true) { //等待连接并且创建一个负责通讯的socket var send = serverSocket.Accept(); //获取链接的IP地址 var sendIpoint = send.RemoteEndPoint.ToString(); Console.WriteLine($"{sendIpoint}Connection"); //开启一个新线程不停接收消息 Thread thread = new Thread(Recive); thread.IsBackground = true; thread.Start(send); } } /// <summary> /// 接收消息 /// </summary> /// <param name="o"></param> static void Recive(object o) { var send = o as Socket; while (true) { //获取发送过来的消息容器 byte[] buffer = new byte[1024 * 1024 * 2]; var effective = send.Receive(buffer); //有效字节为0则跳过 if (effective == 0) { break; } var str = Encoding.UTF8.GetString(buffer,0, effective); Console.WriteLine(str); var buffers = Encoding.UTF8.GetBytes("Server Return Message"); send.Send(buffers); } } } }
2. >
1. 소켓 인스턴스 객체를 인스턴스화하고 연결합니다a. IP 주소와 포트(서버의 IP와 포트)를 생성합니다
b. 서버와 연결합니다. 2. 서버에서 보낸 메시지를 받습니다.a.
실행 b. 루프를 사용하여 보낸 메시지를 가져옵니다. 메시지를 가져오기 위해 메서드를 호출할 때 바이트 변수 매개 변수를 컨테이너로 전달해야 합니다. 메서드 반환 값은 int이며, 획득한 유효한 바이트 수를 나타냅니다. c. 유효한 바이트 수가 0이면 루프에서 빠져나옵니다 3. 서버로 메시지 보내기a. 소켓 객체의 send() 메소드를 호출하여 직접 보내기
4. 코드 using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace SocketClient
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
//创建实例
Socket socketClient = new Socket(SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse("192.168.0.111");
IPEndPoint point = new IPEndPoint(ip, 2333);
//进行连接
socketClient.Connect(point);
//不停的接收服务器端发送的消息
Thread thread = new Thread(Recive);
thread.IsBackground = true;
thread.Start(socketClient);
//不停的给服务器发送数据
int i = 0;
while (true)
{
i++;
var buffter = Encoding.UTF8.GetBytes($"Test Send Message:{i}");
var temp = socketClient.Send(buffter);
Thread.Sleep(1000);
}
}
/// <summary>
/// 接收消息
/// </summary>
/// <param name="o"></param>
static void Recive(object o)
{
var send = o as Socket;
while (true)
{
//获取发送过来的消息
byte[] buffer = new byte[1024 * 1024 * 2];
var effective = send.Receive(buffer);
if (effective == 0)
{
break;
}
var str = Encoding.UTF8.GetString(buffer, 0, effective);
Console.WriteLine(str);
}
}
}
}
위 내용은 C# 소켓은 간단한 콘솔 케이스를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!