TcpClient和TcpListene的例子
参考 c#入门经典一书
1 Server端
控制台程序
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace PictureServer
{
class Program
{
static void Main(string[] args)
{
TcpListener listener = new TcpListener(IPAddress.Any, Properties.Settings.Default.Port);
listener.Start();
while (true)
{
const int bufferSize = 256;
TcpClient client = listener.AcceptTcpClient();
NetworkStream clientStream = client.GetStream();
byte[] buffer = new byte[bufferSize];
int readBytes = 0;
readBytes = clientStream.Read(buffer, 0, bufferSize);
string request = Encoding.ASCII.GetString(buffer).Substring(0, readBytes);
if (request.StartsWith("LIST"))
{
byte[] responseBuffer = PictureHelper.GetFileListBytes();
clientStream.Write(responseBuffer, 0, responseBuffer.Length);
}
else if (request.StartsWith("FILE"))
{
string[] requestMessage = request.Split(':');
string filename = requestMessage[1];
byte[] data = File.ReadAllBytes(Path.Combine(Properties.Settings.Default.PictureDirectory, filename));
clientStream.Write(data, 0, data.Length);
}
clientStream.Close();
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace PictureServer
{
public static class PictureHelper
{
public static string[] GetFileList()
{
string[] files = Directory.GetFiles(Properties.Settings.Default.PictureDirectory);
for (int i = 0; i < files.Length; i++)
{
files[i] = Path.GetFileName(files[i]);
}
return files;
}
public static byte[] GetPictureBytes(string filename)
{
FileInfo fileInfo = new FileInfo(filename);
byte[] buffer = new byte[fileInfo.Length];
using (FileStream stream = fileInfo.OpenRead())
{
stream.Read(buffer, 0, buffer.Length);
}
return buffer;
}
public static byte[] GetFileListBytes()
{
String[] files = PictureHelper.GetFileList();
StringBuilder responseMessage = new StringBuilder();
foreach (string str in files)
{
responseMessage.Append(str);
responseMessage.Append(":");
}
byte[] responseBuffer = Encoding.ASCII.GetBytes(responseMessage.ToString());
return responseBuffer;
}
}
}
2 Client端
winform程序
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace PictureClient
{
public partial class PictureClientForm : Form
{
public PictureClientForm()
{
InitializeComponent();
}
private void buttonListPicture_Click(object sender, EventArgs e)
{
const int bufferSize = 4096;
TcpClient client = new TcpClient();
try
{
client.Connect(Properties.Settings.Default.Server, Properties.Settings.Default.ServerPort);
}
catch (Exception ex)
{
throw (ex);
}
NetworkStream clientStream = client.GetStream();
string request = "LIST";
byte[] requestBuffer = Encoding.ASCII.GetBytes(request);
clientStream.Write(requestBuffer, 0, requestBuffer.Length);
byte[] responseBuffer = new byte[bufferSize];
MemoryStream memStream = new MemoryStream();
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, bufferSize);
memStream.Write(responseBuffer, 0, bytesRead);
} while (bytesRead > 0);
clientStream.Close();
client.Close();
byte[] buffer = memStream.GetBuffer();
string response = Encoding.ASCII.GetString(buffer);
string[] fileNames = response.Split(':');
this.listFiles.DataSource = fileNames;
}
private void buttonGetPicture_Click(object sender, EventArgs e)
{
const int bufferSize = 4096;
TcpClient client = new TcpClient();
try
{
client.Connect(Properties.Settings.Default.Server, Properties.Settings.Default.ServerPort);
NetworkStream clientStream = client.GetStream();
string request = @"FILE:" + this.listFiles.SelectedItem.ToString();
byte[] requestBuffer = Encoding.ASCII.GetBytes(request);
clientStream.Write(requestBuffer, 0, requestBuffer.Length);
byte[] responseBuffer = new byte[bufferSize];
MemoryStream memStream = new MemoryStream();
int bytesRead = 0;
do
{
bytesRead = clientStream.Read(responseBuffer, 0, responseBuffer.Length);
memStream.Write(responseBuffer, 0, bytesRead);
} while (bytesRead > 0);
clientStream.Close();
client.Close();
this.pictureBox.Image = Image.FromStream(memStream);
}
catch (Exception ex)
{
}
}
}
}
源码地址
此程序需要进一步完善 在visual studio 2010下面编译成功
http://download.csdn.net/detail/fffanpei/6929083