1.建立过程
服务端:
(1)建立socket
2)socket.bind(绑定ip,dns)
3) 建立客户端sock(socke.accetp返回连接的客户端);
4)通信socket.send/recieve(发送/接受客户端信 息),当然还有其他信息传输方法~
5)关闭socket(服务端要实施监控,可以不用关闭
客户端:
1)建立 socket;
2)socket.conect(ip,服务器端口)//连接服务器
3)通信 socket.send/receive(还有其他方式);
4)关闭(socket.close());
/*******************实例**********/
客户端读取服务端的的电脑显示时间
我是建立在控制台上的程序
写的不好 仅供参考;
/*******************************/
DateTimeServer.sln
server.cs
//
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace DateTimeServer
{
class Server
{
static void Main(string[] args)
{
try
{
//
String hostname = Dns.GetHostName();//获得本机域名
IPAddress serverIp = Dns.GetHostEntry(hostname).AddressList[0];//本机ip
//DateTimeServer port =13
String Port = "13";//端口号设为13
IPEndPoint serverHost = new IPEndPoint(serverIp, Int32.Parse(Port));
Socket serverSocket = new Socket(
AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
serverSocket.Bind(serverHost);
//backlog=50;
serverSocket.Listen(50);// 设置最大连接客户端50个
Console.WriteLine("dateTime server started at :" +
serverHost.Address.ToString() + ":" + Port);
ListenClient lc = new ListenClient(serverSocket);
ThreadStart serverThreadStart = new ThreadStart(lc.ServerThreadPro);
Thread serverThread = new Thread(serverThreadStart);
serverThread.Start();
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace.ToString());
}
finally
{
}
}
}
}
///
ListenClient.cs
//
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.Threading;
namespace DateTimeServer
{
public class ListenClient
{
private System.Net.Sockets.Socket serverSocket;
private System.Net.Sockets.Socket clientSocket;
//构造函数
public ListenClient(Socket serverSocket)
{
this.serverSocket = serverSocket;
}
public void ServerThreadPro()
{
while (true)
{
try
{
clientSocket = serverSocket.Accept();
IPEndPoint clientInfo = (IPEndPoint)
clientSocket.RemoteEndPoint;//获得客户端信息
IPEndPoint serverIfo = (IPEndPoint)
serverSocket.LocalEndPoint;//获得服务端信息
Console.WriteLine("Client: " + clientInfo.Address.ToString() + ":" +
clientInfo.Port.ToString());
Console.WriteLine("Server:" + serverSocket.AddressFamily.ToString() + ":" +
serverIfo.Port.ToString());
String strDate = DateTime.Now.ToShortDateString() + "" +
DateTime.Now.ToLongTimeString();
byte[] byteDate =
Encoding.ASCII.GetBytes(strDate.ToCharArray());
clientSocket.Send(byteDate, 0, byteDate.Length, SocketFlags.None);//向客户端发送信息
Console.WriteLine("to client: " + clientInfo.Address.ToString() +
":" + clientInfo.Port.ToString() + ":" + strDate);
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
catch(Exception ex){
Console.WriteLine(ex.StackTrace.ToString());
if (clientSocket.Connected)
clientSocket.Close();
}
}
}
}
}
客户端:
Client.cs
//using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace DateTimeClient
{
class Client
{
static void Main(string[] args)
{
try
{
Socket clientSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPAddress serverIp = IPAddress.Parse("172.19.82.54");
IPEndPoint serverHost = new IPEndPoint(serverIp, Int32.Parse("13"));
clientSocket.Connect(serverHost);
byte[] recvByte = new byte[1024];
int i = clientSocket.Receive(recvByte, 0, clientSocket.Available, SocketFlags.None);
string dateTime = Encoding.ASCII.GetString(recvByte, 0, i);
Console.WriteLine("receive{0}bytes", i);
Console.WriteLine("current server date/Time:{0}", dateTime);
clientSocket.Close();
return;
}
catch (Exception ex)
{
ex.StackTrace.ToString();
return;
}
}
}
}