原文地址http://www.jb51.net/article/52244.htm
本文以实例详述了C#实现Socket通信的解决方法,具体实现步骤如下:
1、首先打开VS新建两个控制台应用程序:
ConsoleApplication_socketServer和ConsoleApplication_socketClient。
2、在ConsoleApplication_socketClient中输入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Net;
using
System.Net.Sockets;
namespace
ConsoleApplication_socketClient
{
class
Program
{
static
Socket clientSocket;
static
void
Main(
string
[] args)
{
//将网络端点表示为IP地址和端口 用于socket侦听时绑定
IPEndPoint ipep =
new
IPEndPoint(IPAddress.Parse(
"*.*.*.*"
), 3001);
//填写自己电脑的IP或者其他电脑的IP,如果是其他电脑IP的话需将ConsoleApplication_socketServer工程放在对应的电脑上。
clientSocket =
new
Socket(ipep.AddressFamily,SocketType.Stream,ProtocolType.Tcp);
//将Socket连接到服务器
try
{
clientSocket.Connect(ipep);
String outBufferStr;
Byte[] outBuffer =
new
Byte[1024];
Byte[] inBuffer =
new
Byte[1024];
while
(
true
)
{
//发送消息
outBufferStr = Console.ReadLine();
outBuffer = Encoding.ASCII.GetBytes(outBufferStr);
clientSocket.Send(outBuffer, outBuffer.Length, SocketFlags.None);
//接收服务器端信息
clientSocket.Receive(inBuffer, 1024, SocketFlags.None);
//如果接收的消息为空 阻塞 当前循环
Console.WriteLine(
"服务器说:"
);
Console.WriteLine(Encoding.ASCII.GetString(inBuffer));
}
}
catch
{
Console.WriteLine(
"服务未开启!"
);
Console.ReadLine();
}
}
}
}
|
3、在ConsoleApplication_socketServer中输入以下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.IO;
using
System.Net;
using
System.Net.Sockets;
using
System.Threading;
namespace
ConsoleApplication_socketServer
{
class
Program
{
static
Socket serverSocket;
static
Socket clientSocket;
static
Thread thread;
static
void
Main(
string
[] args)
{
IPEndPoint ipep =
new
IPEndPoint(IPAddress.Any, 3001);
serverSocket =
new
Socket(ipep.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(ipep);
serverSocket.Listen(10);
while
(
true
)
{
clientSocket = serverSocket.Accept();
thread =
new
Thread(
new
ThreadStart(doWork));
thread.Start();
}
}
private
static
void
doWork()
{
Socket s = clientSocket;
//客户端信息
IPEndPoint ipEndPoint = (IPEndPoint)s.RemoteEndPoint;
String address = ipEndPoint.Address.ToString();
String port = ipEndPoint.Port.ToString();
Console.WriteLine(address +
":"
+ port +
" 连接过来了"
);
Byte[] inBuffer =
new
Byte[1024];
Byte[] outBuffer =
new
Byte[1024];
String inBufferStr;
String outBufferStr;
try
{
while
(
true
)
{
s.Receive(inBuffer, 1024, SocketFlags.None);
//如果接收的消息为空 阻塞 当前循环
inBufferStr = Encoding.ASCII.GetString(inBuffer);
Console.WriteLine(address +
":"
+ port +
"说:"
);
Console.WriteLine(inBufferStr);
outBufferStr = Console.ReadLine();
outBuffer = Encoding.ASCII.GetBytes(outBufferStr);
s.Send(outBuffer, outBuffer.Length, SocketFlags.None);
}
}
catch
{
Console.WriteLine(
"客户端已关闭!"
);
}
}
}
}
|