C#:TcpClient(客户端) and TcpServer(服务端)
2009-10-08 23:02
621 查看
服务端:
客户端:
附客户端WPF代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Shapes; using System.IO; using System.Net.Sockets; using System.Net; namespace PictureClient { /// <summary> /// Interaction logic for PictureClientWindow.xaml /// </summary> public partial class PictureClientWindow : Window { private const int bufferSize = 8192; public PictureClientWindow() { InitializeComponent(); } private TcpClient ConnectToServer() { TcpClient client = new TcpClient(); IPHostEntry host = Dns.GetHostEntry(Properties.Settings.Default.Server); var address = (from h in host.AddressList where h.AddressFamily == AddressFamily.InterNetwork select h).First(); client.Connect( address.ToString(), Properties.Settings.Default.ServerPort); return client; } private void buttonGetPictureList_Click(object sender, RoutedEventArgs e) { //send data TcpClient client = ConnectToServer(); NetworkStream clientStream = client.GetStream(); string request = "LIST"; byte[] requestBuffer = Encoding.ASCII.GetBytes(request); clientStream.Write(requestBuffer, 0, requestBuffer.Length); //read response 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); this.DataContext = response.Split(':'); } private void buttonGetpicture_Click(object sender, RoutedEventArgs e) { TcpClient client = ConnectToServer(); NetworkStream clientStream = client.GetStream(); string request = "FILE:" + this.listBoxFiles.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, bufferSize); memStream.Write(responseBuffer, 0, bytesRead); } while (bytesRead > 0); clientStream.Close(); client.Close(); if (memStream.GetBuffer().Length != 0) { BitmapImage bitmapImage = new BitmapImage(); memStream.Seek(0, SeekOrigin.Begin); bitmapImage.BeginInit(); bitmapImage.StreamSource = memStream; bitmapImage.EndInit(); pictureBox.Source = bitmapImage; } } } }
客户端:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; namespace PictureServer { internal static class PictureHelper { internal static IEnumerable<string> GetFileList() { return from file in Directory.GetFiles(Properties.Settings.Default.PictureDirectory) select Path.GetFileName(file); } internal static byte[] GetFileListBytes() { try { IEnumerable<string> files = PictureHelper.GetFileList(); StringBuilder responseMessage = new StringBuilder(); foreach (string s in files) { responseMessage.Append(s); responseMessage.Append(":"); } return Encoding.ASCII.GetBytes(responseMessage.ToString()); } catch (System.Exception ex) { Console.WriteLine(ex.Message); throw; } } } class Program { static void Main(string[] args) { TcpListener listener = new TcpListener(IPAddress.Any, Properties.Settings.Default.Port); listener.Start(); Console.WriteLine("Server running..."); while (true) { const int bufferSize = 8192; 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", StringComparison.Ordinal)) { byte[] responseBuffer = PictureHelper.GetFileListBytes(); clientStream.Write(responseBuffer, 0, responseBuffer.Length); } else if (request.StartsWith("FILE", StringComparison.Ordinal)) { string[] requestMessage = request.Split(':'); string filename = requestMessage[1]; try { byte[] data = File.ReadAllBytes( Path.Combine(Properties.Settings.Default.PictureDirectory, filename) ); clientStream.Write(data, 0, data.Length); } catch(IOException e) { Console.WriteLine("IOException: " + e.Message); } catch(WebException e) { Console.WriteLine("WebException: " + e.Message); } catch(Exception e) { Console.WriteLine("Other Exception: " + e.Message); } } clientStream.Close(); } } } }
附客户端WPF代码:
<Window x:Class="PictureClient.PictureClientWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Picture Client" Height="329" Width="616"> <Grid Name="PictureClient"> <Grid.ColumnDefinitions> <ColumnDefinition Width="19*" /> <ColumnDefinition Width="563*" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition Height="85*" /> <RowDefinition Height="21*" /> <RowDefinition Height="13*" /> <RowDefinition Height="23*" /> <RowDefinition Height="29*" /> <RowDefinition Height="120*" /> </Grid.RowDefinitions> <Image x:Name="pictureBox" Grid.RowSpan="12" Margin="6,0,6,10" Grid.ColumnSpan="12" /> <Button HorizontalAlignment="Right" Margin="0,21,18,40" Name="buttonGetPictureList" Width="168" Click="buttonGetPictureList_Click" Grid.Column="1">Get Picture List</Button> <Button Grid.Row="5" Height="28" HorizontalAlignment="Right" Margin="0,0,17,10" Name="buttonGetpicture" VerticalAlignment="Bottom" Width="169" Click="buttonGetpicture_Click" Grid.Column="1">Get Picture</Button> <ListBox ItemsSource="{Binding}" Grid.RowSpan="6" HorizontalAlignment="Right" Margin="0,54,19,47" Name="listBoxFiles" Width="167" Grid.Column="1" /> </Grid> </Window>
相关文章推荐
- C#网络编程.2.套接字.TcpListener.TcpClient.服务端客户端通信
- (死亡历险)Delphi7 IdTCPClient1,IdTCPServer1客户端向服务端发送指令进行文件下载
- (死亡历险)Delphi7 IdTCPClient1,IdTCPServer1客户端向服务端传送大型文件
- (死亡历程)Delphi7 自带的控件 IdTCPClient,IdTCPServer 客户端发送给服务端,服务端转发给其它客户端
- 客户端和服务端程序 server.c and client.c
- C#网络编程.2.套接字.TcpListener.TcpClient.服务端客户端通信
- java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)
- C# TCP实现多个客户端与服务端 数据 传输
- C#怎样测试SmtpClient客户端是否成功连接SmtpServer?
- C# winfrom TCP 服务端和客户端(链接)
- TCP/IP Client and Server¶
- [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]
- SQLiteServer+SQLiteClient 用于.Net项目的SQLite服务端程序和客户端类库
- java 和 C++ Socket通信(java作为服务端server,C++作为客户端client,解决中文乱码问题GBK和UTF8)
- C#怎样测试SmtpClient客户端是否成功连接SmtpServer?
- [并发并行]_[线程模型]_[Pthread线程使用模型之三 客户端/服务端模型(Client/Server]
- tcp sock kernel server and client
- Simple TCP/IP Echo Server & Client Application in C#
- [转载]异步Socket服务器与客户端(An Asynchronous Socket Server and Client)
- Unity: C# TCP Client Server TcpListener NetworkStream UDP