C# 使用c语言的客户机-服务器连接#
我想使用“windows窗体应用程序”在c#中实现客户机-服务器功能 但我面临的问题是在一台机器上连接客户机和服务器。 我使用visual studio 2013,制作了两个文件,一个用于客户端,另一个用于服务器C# 使用c语言的客户机-服务器连接#,c#,C#,我想使用“windows窗体应用程序”在c#中实现客户机-服务器功能 但我面临的问题是在一台机器上连接客户机和服务器。 我使用visual studio 2013,制作了两个文件,一个用于客户端,另一个用于服务器 "This is client file" using System; using System.Collections.Generic; using System.ComponentModel;
"This is client file"
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
namespace Network_Distribution
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void btnBrowse_Click(object sender, EventArgs e)
{
openFileDialog.ShowDialog();
tbFilename.Text = openFileDialog.FileName;
}
private void btnSend_Click(object sender, EventArgs e)
{
Stream fileStream = File.OpenRead(tbFilename.Text);
// Alocate memory space for the file
byte[] fileBuffer = new byte[fileStream.Length];
fileStream.Read(fileBuffer, 0, (int)fileStream.Length);
// Open a TCP/IP Connection and send the data
TcpClient clientSocket = new TcpClient(tbServer.Text,8080);
NetworkStream networkStream = clientSocket.GetStream();
networkStream.Write(fileBuffer,0,fileBuffer.GetLength(0));
networkStream.Close();
}
}
}
"This is server file"
using System;`enter code here`
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Threading;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.IO;
using System.Collections;
namespace Network_Distribution_Client
{
//public partial class Form1 : Form
//{
// public Form1()
// {
// InitializeComponent();
// }
//}
public partial class Form1: System.Windows.Forms.Form
{
private ArrayList nSockets;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, System.EventArgs e)
{
IPHostEntry IPHost = Dns.GetHostByName(Dns.GetHostName());
lblStatus.Text = "My IP address is " + IPHost.AddressList[0].ToString();
nSockets = new ArrayList();
Thread thdListener = new Thread(new ThreadStart(listenerThread));
thdListener.Start();
}
//New ThreadStart(AddressOf handlerThread(Parameter))
public void listenerThread()
{
TcpListener tcpListener = new TcpListener(8000);
tcpListener.Start();
while(true)
{
Socket handlerSocket = tcpListener.AcceptSocket();
if (handlerSocket.Connected)
{
lbConnections.Items.Add( handlerSocket.RemoteEndPoint.ToString() + " connected." );
lock (this)
{
nSockets.Add(handlerSocket);
}
ThreadStart thdstHandler = new ThreadStart(handlerThread);
Thread thdHandler = new Thread(thdstHandler);
thdHandler.Start();
}
}
}
public void handlerThread()
{
Socket handlerSocket = (Socket)nSockets[nSockets.Count-1];
NetworkStream networkStream = new NetworkStream(handlerSocket);
int thisRead=0;
int blockSize=1024;
Byte[] dataByte = new Byte[blockSize];
lock(this)
{
// Only one process can access // the same file at any given time
Stream fileStream = File.OpenWrite("c:\\my documents\\SubmittedFile.txt");
while(true)
{
thisRead=networkStream.Read(dataByte,0,blockSize);
fileStream.Write(dataByte,0,thisRead);
if (thisRead==0) break;
}
fileStream.Close();
}
lbConnections.Items.Add("File Written");
handlerSocket = null;
}
}
}
您需要说明问题的症状是什么…您应该查看
WCF
@DarkBee name droping有点奇怪。。。为什么不命名ServiceStack,SignalR,…?因为WCF集成到.NET framework中,并且易于全双工部署。您必须声明异常消息。我在代码中注意到的一个问题是服务器正在侦听TcpListener(8000)
,但客户端试图连接到8080端口。如果这是您的输入错误,请忽略。