PDA

View Full Version : سوال: buffer Socket Programing



MehdiElexal
یک شنبه 24 آذر 1392, 19:53 عصر
با سلام آیا در سوکت پروگرمینگ چیزی به عنوان بافر وجود داره ؟
اطلاعات من خیلی کند میاد :(
این کد سرور
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.Net;
using System.Net.Sockets;
using PersianConvertorElexal;
namespace Server
{
public partial class Form1 : Form
{
public AsyncCallback pfnWorkerCallBack;
public Socket m_socListener;
public Socket m_socWorker;
string RecivedDataComplete = "";
public Form1()
{
InitializeComponent();
}


private void Form1_Load(object sender, EventArgs e)
{

}

private void cmdListen_Click(object sender, EventArgs e)
{
try
{
//create the listening socket...
m_socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, 8221);
//bind to local IP Address...
m_socListener.Bind(ipLocal);
//start listening...
m_socListener.Listen(4);
// create the call back for any client connections...
m_socListener.BeginAccept(new AsyncCallback(OnClientConnect), null);
cmdListen.Enabled = false;

}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
public void OnClientConnect(IAsyncResult asyn)
{
try
{
m_socWorker = m_socListener.EndAccept(asyn);

WaitForData(m_socWorker);
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0, "1", "\n OnClientConnection: Socket has been closed\n");
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}

}
public class CSocketPacket
{
public System.Net.Sockets.Socket thisSocket;
public byte[] dataBuffer = new byte[1];
}

public void WaitForData(System.Net.Sockets.Socket soc)
{
try
{
if (pfnWorkerCallBack == null)
{
pfnWorkerCallBack = new AsyncCallback(OnDataReceived);
}
CSocketPacket theSocPkt = new CSocketPacket();
theSocPkt.thisSocket = soc;
// now start to listen for any data...
soc.BeginReceive(theSocPkt.dataBuffer, 0, theSocPkt.dataBuffer.Length, SocketFlags.None, pfnWorkerCallBack, theSocPkt);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}

}

public void OnDataReceived(IAsyncResult asyn)
{
try
{
CSocketPacket theSockId = (CSocketPacket)asyn.AsyncState;
//end receive...
int iRx = 0;
iRx = theSockId.thisSocket.EndReceive(asyn);
char[] chars = new char[iRx + 1];
System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(theSockId.dataBuffer,0, iRx, chars, 0);
System.String szData = new System.String(chars);
txtDataRx.Text=txtDataRx.Text + szData;
WaitForData(m_socWorker);
}
catch (ObjectDisposedException)
{
System.Diagnostics.Debugger.Log(0, "1", "\nOnDataReceived: Socket has been closed\n");
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}
private void button1_Click(object sender, EventArgs e)
{
try
{
Object objData = txtDataTx.Text;
byte[] byData = System.Text.Encoding.ASCII.GetBytes(objData.ToStri ng());
m_socWorker.Send(byData);
}
catch (SocketException se)
{
MessageBox.Show(se.Message);
}
}


private void button2_Click(object sender, EventArgs e)
{

txtDataRx.Text = "";
}

private void button3_Click(object sender, EventArgs e)
{


txtData.Text = PersianConvertorElexal.ConvertorPersianText.base64 Decode(txtDataRx.Text);
txtDataRx.Text = "";
//textBox1.Text = RecivedDataComplete;
}

private void txtDataRx_TextChanged(object sender, EventArgs e)
{

}

private void timer1_Tick(object sender, EventArgs e)
{

if (txtDataRx.Text != "")
{
txtData.Text = PersianConvertorElexal.ConvertorPersianText.base64 Decode(txtDataRx.Text);
txtDataRx.Text = "";
}
if (txtDataRx.Text == "")
{

}
}
}
}



و این کد کلاینت


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 PersianConvertorElexal;
using System.Net.Sockets;

namespace Client
{
public partial class Form1 : Form
{
string SendMessage = "";
Socket m_socWorker;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void cmdConnect_Click(object sender, EventArgs e)
{
try
{
//create a new client socket ...
m_socWorker = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
String szIPSelected = txtIPAddress.Text;
String szPort = txtPort.Text;
int alPort = System.Convert.ToInt16(szPort, 10);

System.Net.IPAddress remoteIPAddress = System.Net.IPAddress.Parse(szIPSelected);
System.Net.IPEndPoint remoteEndPoint = new System.Net.IPEndPoint(remoteIPAddress, alPort);
m_socWorker.Connect(remoteEndPoint);
}
catch (System.Net.Sockets.SocketException se)
{
MessageBox.Show(se.Message);
}
}

private void cmdClose_Click(object sender, EventArgs e)
{
m_socWorker.Close();
}

private void cmdSendData_Click(object sender, EventArgs e)
{
try
{
SendMessage = PersianConvertorElexal.ConvertorPersianText.base64 Encode(txtData.Text);
Object objData = SendMessage;
byte[] byData = System.Text.Encoding.ASCII.GetBytes(objData.ToStri ng());
m_socWorker.Send(byData);
}
catch (System.Net.Sockets.SocketException se)
{
MessageBox.Show(se.Message);
}
}

private void cmdReceiveData_Click(object sender, EventArgs e)
{
try
{
byte[] buffer = new byte[1024];
int iRx = m_socWorker.Receive(buffer);
char[] chars = new char[iRx];

System.Text.Decoder d = System.Text.Encoding.UTF8.GetDecoder();
int charLen = d.GetChars(buffer, 0, iRx, chars, 0);
System.String szData = new System.String(chars);
txtDataRx.Text = szData;
}
catch (System.Net.Sockets.SocketException se)
{
MessageBox.Show(se.Message);
}
}

private void txtData_TextChanged(object sender, EventArgs e)
{
this.Text = txtData.TextLength.ToString();
}
}
}




ممنون

MehdiElexal
یک شنبه 24 آذر 1392, 20:40 عصر
کسی نیست جواب بده ؟ :(

MehdiElexal
دوشنبه 25 آذر 1392, 21:27 عصر
ای بابا رفقا یکی به داد ما برسه :(

abbas.oveissi
سه شنبه 26 آذر 1392, 03:22 صبح
سلام ،من کدهایی که گذاشتید رو نخوندم ولی توی سایت MSDN میتونید تمام خصوصیات یک سوکت رو ببینید و هر کدوم رو لازم میدونید تنظیم کنید تا به نتیجه ی مطلوبتون برسید :
Socket Properties Link : http://msdn.microsoft.com/en-us/library/System.Net.Sockets.Socket_properties(v=vs.110).asp x
یکی از این خصوصیات هم ReceiveBufferSize است که میتونید به صورت زیر تنظیمش کنید :
// Set the receive buffer size to 8k
tcpSocket.ReceiveBufferSize = 8192;
امیدوارم در نبود اساتید جوابم کمکی بکنه.