ztx4
چهارشنبه 25 اسفند 1389, 01:31 صبح
67549سلام دوستان
من تازه شروع به یادگیری برنامه نویسی سوکت کردم.
به عنوان تمرین دارم یه برنامه ی ساده ی چت می نویسم.
اما مشکلم اینه که پیام اول به درستی ارسال و دریافت می شه اما به محظ دریافت پیام اول این استثنا رخ می ده:
Only one usage of each socket address (protocol/network address/port) is normally permitted
اینم کد برنامه ام:
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.Threading;
namespace SocketChatProgram
{
public partial class Form1 : Form
{
static Socket soc;
static IPEndPoint iplocal = new IPEndPoint(IPAddress.Any, 46317);
delegate void SetTextCallback(string text);
Thread threadRecive;
//Thread threadSend = new Thread(send);
public Form1()
{
InitializeComponent();
}
void recive()
{
while (true)
{
soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
soc.Bind(iplocal);
soc.Listen(100);
// lblState.Text = "Listen";
soc = soc.Accept();
byte[] buffer = new byte[500];
soc.Receive(buffer);
string message = Encoding.Unicode.GetString(buffer);
SedText(message);
Thread.Sleep(5);
}
}
private void SedText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.lstMessages.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SedText);
this.Invoke(d, new object[] { text });
}
else
{
this.lstMessages.Items.Add(text);
}
}
void send()
{
//soc.Bind(iplocal);
soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string s = txtmessage.Text;
byte[] message = Encoding.Unicode.GetBytes(s);
soc.Connect(txtIP.Text, 46317);
soc.Send(message);
soc.Close();
lstMessages.Items.Add(Encoding.Unicode.GetString(m essage));
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnConnect_Click(object sender, EventArgs e)
{
//threadRecive.Start();
threadRecive = new Thread(recive);
threadRecive.Start();
btnConnect.Enabled = false;
txtIP.Enabled = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
send();
}
private void txtmessage_TextChanged(object sender, EventArgs e)
{
if (txtmessage.Text.Length == 0)
btnSend.Enabled = false;
else
btnSend.Enabled = true;
}
}
}
خود پروژه رو هم Attach می کنم.
ممنون از راهنمایی شما.
67542
من تازه شروع به یادگیری برنامه نویسی سوکت کردم.
به عنوان تمرین دارم یه برنامه ی ساده ی چت می نویسم.
اما مشکلم اینه که پیام اول به درستی ارسال و دریافت می شه اما به محظ دریافت پیام اول این استثنا رخ می ده:
Only one usage of each socket address (protocol/network address/port) is normally permitted
اینم کد برنامه ام:
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.Threading;
namespace SocketChatProgram
{
public partial class Form1 : Form
{
static Socket soc;
static IPEndPoint iplocal = new IPEndPoint(IPAddress.Any, 46317);
delegate void SetTextCallback(string text);
Thread threadRecive;
//Thread threadSend = new Thread(send);
public Form1()
{
InitializeComponent();
}
void recive()
{
while (true)
{
soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
soc.Bind(iplocal);
soc.Listen(100);
// lblState.Text = "Listen";
soc = soc.Accept();
byte[] buffer = new byte[500];
soc.Receive(buffer);
string message = Encoding.Unicode.GetString(buffer);
SedText(message);
Thread.Sleep(5);
}
}
private void SedText(string text)
{
// InvokeRequired required compares the thread ID of the
// calling thread to the thread ID of the creating thread.
// If these threads are different, it returns true.
if (this.lstMessages.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(SedText);
this.Invoke(d, new object[] { text });
}
else
{
this.lstMessages.Items.Add(text);
}
}
void send()
{
//soc.Bind(iplocal);
soc = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string s = txtmessage.Text;
byte[] message = Encoding.Unicode.GetBytes(s);
soc.Connect(txtIP.Text, 46317);
soc.Send(message);
soc.Close();
lstMessages.Items.Add(Encoding.Unicode.GetString(m essage));
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void btnConnect_Click(object sender, EventArgs e)
{
//threadRecive.Start();
threadRecive = new Thread(recive);
threadRecive.Start();
btnConnect.Enabled = false;
txtIP.Enabled = false;
}
private void btnSend_Click(object sender, EventArgs e)
{
send();
}
private void txtmessage_TextChanged(object sender, EventArgs e)
{
if (txtmessage.Text.Length == 0)
btnSend.Enabled = false;
else
btnSend.Enabled = true;
}
}
}
خود پروژه رو هم Attach می کنم.
ممنون از راهنمایی شما.
67542