ช่วยดูโค้ดโปรแกรมให้หน่อยค่ะ เป็นภาษา C# มันติด error ไม่รู้ว่ามันคืออะรัยค่ะ คือตอนนี้กำลังเขียนโปรแกรมรับส่งไฟล์ผ่านเครื่อข่ายค่ะ
คือตอนนี้กำลังเขียนโปรแกรมรับส่งไฟล์ผ่านเครื่อข่ายค่ะ
แล้วอยากให้ server กับ client สามารถส่งไฟล์หากันได้
แต่ตัวโค้ดมันติด error เลยอยากให้พี่ๆ ช่วยดูให้หน่อยว่าเป็นเพราะอะรัย
หรือมีวิธีการเขียนยังงัยช่วยแนะนำหน่อยค่ะ
โค้ด 1
Code (C#)
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
static void Main(String[] args)
{
// 1. to create a socket
Socket sListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 2. Fill IP
IPAddress IP = IPAddress.Parse("127.0.0.1");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
// 3. binding
sListen.Bind(IPE);
// 4. Monitor
Console.WriteLine("Service is listening ...");
sListen.Listen(2);
// 5. loop to accept client connection requests
while (true)
{
Socket clientSocket;
try
{
clientSocket = sListen.Accept();
}
catch
{
throw;
}
// send data to the client
//clientSocket.Send (Encoding.Unicode.GetBytes ("I am a server, you there?? !!!!"));
// send the file
//byte[] buffer = ReadImageFile ("1.jpg");
byte[] buffer = ReadImageFile("xx.ppt");
clientSocket.Send(buffer, buffer.Length, SocketFlags.None);
Console.WriteLine("Send success!");
}
}
private static byte[] ReadImageFile(String img)
{
FileInfo fileinfo = new FileInfo(img);
// byte[] buf = new byte[fileInfo.Length];
byte[] buf = new byte[fileinfo.Length];
FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
fs.Read(buf, 0, buf.Length);
fs.Close();
//fileInfo.Delete ();
GC.ReRegisterForFinalize(fileinfo);
GC.ReRegisterForFinalize(fs);
return buf;
}
}
}
โค้ด 2
Code (C#)
using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace ConsoleApplication2
{
class Program
{
static void Main(String[] args)
{
// 1. to create a socket
Socket S = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 2. fill in the remote IP
IPAddress IP = IPAddress.Parse("127.0.0.1");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
Console.WriteLine("started connection service ....");
// 3. connect to the server
S.Connect(IPE);
// 4. receive data
byte[] buffer = new byte[1000000];
S.Receive(buffer, buffer.Length, SocketFlags.None);
//var Msg = Encoding.Unicode.GetString (buffer);
//Console.WriteLine ("received message: (0)", msg);
Console.WriteLine("Receive success");
// FileStream fs = File.Create ("1.jpg");
FileStream fs = File.Create("yy.ppt");
fs.Write(buffer, 0, buffer.Length);
fs.Close();
Console.ReadKey();
}
}
}
แล้วมันจะติด error
ช่วยอธิบายหน่อยค่ะว่าคืออะรัยTag : .NET, C#, VS 2008 (.NET 3.x)
Date :
2011-03-17 18:35:12
By :
aofaff
View :
5525
Reply :
21
ขอบคุณพี่ mr.win ที่ช่วยตอบข้อสงสัยค่ะ
แต่ตัวที่ให้ไปศึกษานะทำตามแล้วแต่ทำมัยได้แค่รันอย่างเดียวค่ะ
แต่ทำอะรัยไม่ได้เลย
Date :
2011-03-17 21:53:58
By :
aofaff
ผมก็เอาไปรันดูแล้วก็ติดเหมือนกันคับ
คัยพออธิบายได้ช่วยหน่อยคับ
r
พอรันขึ้นมาแล้วพอจะกดส่งก็เกิด Error คับ
คัยพออธิบายได้ช่วยหน่อยคับ
ขอบคุณมากมายคับ
Date :
2011-03-23 13:02:22
By :
kit
หนูเองก็ไม่ค่อยแน่ใจนะคะ
แต่เท่าที่ดู Error มันบอกว่า มันหาไฟล์ xx.ppt ไม่เจออ่ะค่ะ
ต้องลองดูว่า ไฟล์นี้ มีอยู่จริงหรือเปล่าค่ะ หรือถ้ามีอยู่จริง อาจจะมีการกำหนดที่อยู่ไฟล์ไม่ถูกต้องหรือเปล่าคะ
โปรแกรมเลยหาไฟล์ไม่เจอค่ะ
ลองดูนะคะ
Date :
2011-03-24 16:17:47
By :
roongine
มีคัยพอที่จะแก้ปัญหาได้ไหมคับช่วยหน่อยคับตอนนี้ผมรันดูแล้วก็ยังติด Errer อยู่คับ
ช่วยหน่อยคับ ขอบคุณล้วงหน้าเลยนะคับ
Date :
2011-03-24 18:20:57
By :
kit
หาแล้วคับไม่เจอคับ
ช่วยดูหัยหน่อยได้ไหมคับ
ขอบคุณ Roongine สำหรับคำตอบดีๆๆ
Date :
2011-03-25 01:05:07
By :
kit
byte[] buf = new byte[fileinfo.Length];
ช่วยหน่อยคับหาไม่เจอจิงๆคับ
ขอบคุณล้วงเลยนะคับ
Date :
2011-03-25 03:02:07
By :
kit
หา file ไม่เจอชัวร์ครับ ลอง check path ดูน่ะครับ
Date :
2011-03-25 07:06:22
By :
dirmus
ผมไม่เข้าใจคับ
check path
ขอคำอธิบายหัยหน่อยนะคับ
ขอบคุณสำหรับคำตอบของ Guest ขอบคุณมากนะคับ
Date :
2011-03-25 09:30:25
By :
kit
ว่าแต่ path ขอไฟล์นั้นมันจากไหนครับ ปกติน่าจะมี path ทีถูกต้องเช่น C:\picture\xxx.jpg มันถึงจะสมารถเรียกไฟล์ได้ครับ
Date :
2011-03-25 09:35:59
By :
webmaster
ใช่ค่ะ ลองใส่เป็น path ดูนะคะ
เพราะว่า FileInfo มันรับค่า เป็น Path ไม่ใช่เหรอคะ ถ้าเข้าใจไม่ผิด
ก็ลองใส่เป็น Path เช่น C:\picture\xx.ppt
หรือไม่ก็ลองใช้ Server.MapPath("xx.ppt") ดูนะคะ
ได้ผลยังไง ส่งข่าวด้วยนะคะ
Date :
2011-03-25 13:39:37
By :
roongine
ยอมรับนะคับว่าไม่เป็นจริงๆ หาวิธีแก้แล้วแต่ไม่ได้
หรือว่าผมแก้ไม่ถูกบอกหน่อยคับ
ขอบคุณสำหรับคำตอบนะคับคุณ Roongine Sang
แก้ไม่ได้จิงๆคับ แก้หัยหน่อยคับ
Date :
2011-03-27 16:51:26
By :
kit
คือตอนนี้โปรแกรมสามารถส่งได้แล้วค่ะ
โดยเอาไฟล์ xx.ppt ไปไว้ที่ bin ของ ConsoleApplication1 แล้วก็รัน ตัว ConsoleApplication2
ก็สามารถรับไฟล์ได้ค่ะ
คือตอนแรกก็ไม่ได้ลองเอาไว้ดูนะค่ะ
****แต่ว่าก็ยังไม่เข้าใจว่าถ้าเราอยากจะส่งไฟล์อื่นบ้างละค่ะ
โดยที่เราไม่ต้องมาเปลี่ยนชื่อไฟล์ในโค้ดทุกครั้งที่ส่งแบบนี้ จะเขียนโค้ดยังงัยดี
พี่ท่านใดมีวิธีการ หรือคำแนะนำใดก็ช่วยบอกหน่อยนะค่ะ
ขอบคุณค่ะ
Date :
2011-03-28 15:49:15
By :
aofaff
แทรก Code นี้
Console.Write("Please input path file :");
string filename = Console.ReadLine();
byte[] buffer = ReadImageFile(filename);
หากเป็น Winapp
OpenFileDialog browseFile = new OpenFileDialog();
browseFile.Filter = "XML Files (*.xml)|*.xml";
browseFile.Title = "Browse XML file";
if (browseFile.ShowDialog() == DialogResult.Cancel)
return;
try
{
txtBrowse.Text = browseFile.FileName;
}
catch (Exception)
{
MessageBox.Show("Error opening file", "File Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Date :
2011-03-28 17:08:18
By :
superpheak
ขอบคุณสำหรับคำตอบนะคับคุณ pheak
แต่ไม่รู้ว่าแทรกตรงไหนคับบอกหน่อยคับ
Date :
2011-03-28 22:48:30
By :
kit
ผมไม่รู้ว่าแทรกตรงไหนคับรกวนหน่อยคับ
ขอบคุณนะคับสำหรับคำตอบ
Date :
2011-03-30 00:58:53
By :
kit
ผมเขียน โปรแกรมฝั่ง Server ให้ให้ใหม่นะ ว่างๆ
ก็คอมไพล์โปรแกรมปรกติ
การใช้งาน
1. Start โปรแกรม Server ขึ้นมา
2. เลือกไฟล์ที่ต้องการส่ง ขณะนี้โปรแกรมจะทำการสร้าง Connection เพื่อรอติดต่อจาก Client
โดยจะแสดงข้อความ "ขณะนี้กำลังรอ Client ติดต่อมาอยู่"
3. Start โปรแกรม Client (ใช้โปรแกรมเดิม) ฝั่ง Server จะแสดงข้อความ Client ติดต่อมาแล้ว กดส่ง File ได้
พร้อมกับปุ่มส่ง File Enabled
4. เมื่อส่ง File เสร็จ จะแสดงข้อความ ส่ง File เรียบร้อยแล้วครับ
ลอง test ดู work ไหม..
Code (C#)
using System;
using System.Drawing;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Text;
using System.Windows.Forms;
class Server : Form
{
private TextBox txtPath;
private Label lblStatus;
private Button btnSend;
Socket clientSocket;
public Server()
{
Text = "ตัวอย่าง Server Tranfer file นะครับ.";
Size = new Size(400,150);
txtPath = new TextBox();
txtPath.Parent = this;
txtPath.Size = new Size(300, 2 * Font.Height);
txtPath.Location = new Point(5, 14);
Button btnBrowse = new Button();
btnBrowse.Text = "เลือก File";
btnBrowse.Parent = this;
btnBrowse.Size = new Size(6 * Font.Height, 2 * Font.Height);
btnBrowse.Location = new Point(310, 10);
btnBrowse.Click += new EventHandler(btnBrowse_OnClick);
btnSend = new Button();
btnSend.Text = "ส่ง File";
btnSend.Parent = this;
btnSend.Size = new Size(6 * Font.Height, 2 * Font.Height);
btnSend.Location = new Point(310, 50);
btnSend.Click += new EventHandler(btnSend_OnClick);
btnSend.Enabled = false;
lblStatus = new Label();
lblStatus.Parent = this;
lblStatus.Text = "ขณะนี้กำลังรอ Client ติดต่อมาอยู่";
lblStatus.AutoSize = true;
lblStatus.Location = new Point(5, 50);
}
void btnBrowse_OnClick(object obj, EventArgs ea)
{
OpenFileDialog browseFile = new OpenFileDialog();
browseFile.Title = "Browse file";
if (browseFile.ShowDialog() == DialogResult.Cancel)
return;
try
{
txtPath.Text = browseFile.FileName;
}
catch (Exception)
{
MessageBox.Show("Error opening file", "File Error",
MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
Socket sListen = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress IP = IPAddress.Parse("127.0.0.1");
IPEndPoint IPE = new IPEndPoint(IP, 4321);
sListen.Bind(IPE);
sListen.Listen(2);
while (true)
{
try
{
clientSocket = sListen.Accept();
lblStatus.Text = "Client ติดต่อมาแล้ว กดส่ง File ได้";
btnSend.Enabled = true;
return;
}
catch
{
throw;
}
}
}
private static byte[] ReadImageFile(String img)
{
FileInfo fileinfo = new FileInfo(img);
byte[] buf = new byte[fileinfo.Length];
FileStream fs = new FileStream(img, FileMode.Open, FileAccess.Read);
fs.Read(buf, 0, buf.Length);
fs.Close();
GC.ReRegisterForFinalize(fileinfo);
GC.ReRegisterForFinalize(fs);
return buf;
}
void btnSend_OnClick(object obj, EventArgs ea)
{
byte[] buffer = ReadImageFile(txtPath.Text);
clientSocket.Send(buffer, buffer.Length, SocketFlags.None);
lblStatus.Text = "ส่ง File เรียบร้อยแล้วครับ ";
}
public static void Main()
{
Application.Run(new Server());
}
}
Date :
2011-03-30 13:25:01
By :
superpheak
ขอรบกวนถามอีกซักครั้งนะค่ะ
ทำไมตัวโปรแกรม ตัวอย่าง Server Tranfer file
มันถึงติด error ที่หน้าต่าง Form1.Designer.cs ค่ะ
ติด error ที่บรรทัด txtPath btnSend lblStatus ทั้งที่ก็ตั้งชื่อครบแล้ว
private System.Windows.Forms.TextBox txtPath;
private System.Windows.Forms.Button btnBrowse;
private System.Windows.Forms.Button btnSend;
private System.Windows.Forms.Label lblStatus;
ช่วยตอบข้อสงสัยหน่อยนะค่ะ
ขอบคุณค่ะ
Date :
2011-04-02 21:12:15
By :
aofaff
คือโปรแกรมที่ผมเขียนเนี่ย ต้อง Run ผ่าน visual command prompt ครับ
copy ไปใว้ในนามสกุล .cs ไฟล์เดียว แล้ว complier โดย csc xx.cs
Date :
2011-04-03 12:30:49
By :
pheak
ขอบคุณพี่ pheak นะค่ะที่ช่วยแนะนำ
แต่อยากรู้ว่า copy ตัว .cs หรือ ตัว .exe ค่ะ
เพราะเอาไปวางแล้วแต่ก็ยังรันไม่ขึ้นนะค่ะ
Date :
2011-04-06 14:40:36
By :
aofaff
ไม่เป็นไรจ๊ะ ที่รัก คิคิ
Date :
2011-11-13 18:32:48
By :
คนหล่อ
Load balance : Server 00