我在学习服务端和客户端的过程中,制作了一个客户端输入用户名和密码,在服务端能显示出来的程序,可是我的客户端向服务端发送成功数据之后,就回出现一个异常错误:“远程主机强迫关闭了一个连接”,但是用再用客户端来发送数据,服务端也照样能收到,就是一个问题老弹出这个异常对话框,其他的都正常,这个是怎么回事呢?
while (true)
{
try
{
Byte[] rec = new Byte[100];
int receiveCount =accsocket.Receive(rec);
//NetworkStream netstream = new NetworkStream(accsocket);
if (receiveCount>0)
{
//netstream.Read(rec, 0, rec.Length);
string recmessage = Encoding.UTF8.GetString(rec);
if (recmessage.Substring(0, 6) == "USER--")
{
recmessage = recmessage.Substring(6, 94).Trim('^');
listBox1.Items.Add("用户名:" + recmessage);
}
else
{
recmessage = recmessage.Substring(6, 94).Trim('^');
listBox1.Items.Add("密码:" + recmessage);
}
}
else
{
accsocket.Close();
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
break;
} }
while (true)
{
try
{
Byte[] rec = new Byte[100];
int receiveCount =accsocket.Receive(rec);
//NetworkStream netstream = new NetworkStream(accsocket);
if (receiveCount>0)
{
//netstream.Read(rec, 0, rec.Length);
string recmessage = Encoding.UTF8.GetString(rec);
if (recmessage.Substring(0, 6) == "USER--")
{
recmessage = recmessage.Substring(6, 94).Trim('^');
listBox1.Items.Add("用户名:" + recmessage);
}
else
{
recmessage = recmessage.Substring(6, 94).Trim('^');
listBox1.Items.Add("密码:" + recmessage);
}
}
else
{
accsocket.Close();
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
break;
} }
解决方案 »
- C#的一个很简单的问题。。请高手帮忙。小弟无尽感激
- 用了皮肤控件以后,怎么不能设置控件的backColor了
- 游戏网站如何做2000人左右的并发 访问 搜索?
- C# winform 鼠标悬停在控件上后,出现提示
- 安装Visual Studio 2005 Sp1 的问题?很郁闷!
- toolStripComboBox模拟浏览器
- 问大家一个关于数据访问层的问题
- Composite UI Application Block 的问题
- 大家能不能推荐几个漂亮的界面和实现方法?
- 关于chrb和lenb在c#中的如何使用问题?(急)
- Richtextbox中输入关键字就变为蓝色,怎么实现?
- listview中 largeico图片如何平铺
你客户端再发送是不是又新new了一个socket所以服务器也新产生了一个accsocket来处理你的请求
还有你在 catch (Exception ex)
{
MessageBox.Show(ex.ToString());
break;
}
里没有关闭socket这是不对的
{
public partial class Form1 : Form
{
private IPAddress myip = IPAddress.Parse("127.0.0.1");
private Socket listener;
private Socket accsocket;
public Form1()
{
InitializeComponent();
}
/* public delegate void InvokeDelegate(); public void ItemsAdd(string str)
{
listBox1.Items.Add(str);
} */
private void button1_Click(object sender, EventArgs e)
{
Thread acceptThread = new Thread(new ThreadStart(AcceptWorkThread));
acceptThread.Start();
}
private void AcceptWorkThread()
{
listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint locEP = new IPEndPoint(myip, 8888);
listener.Bind(locEP);//要与 Socket 关联的本地 EndPoint
listener.Listen(100);//指定队列中最多可容纳的等待接受的传入连接数
string str = "开始监听8888……";
listBox1.Items.Add(str);
while (true)
{
accsocket = listener.Accept();
if (accsocket.Connected)
{
listBox1.Items.Add("与客户端成功连接……");
Thread.CurrentThread.IsBackground = true;
Thread thread = new Thread(new ThreadStart(ReceiveWorkThread));
thread.Start();
}
}
}
private void ReceiveWorkThread()
{
Thread.CurrentThread.IsBackground = true;
//Socket socket = (Socket)obj;
// string sql = "select password from users where username=" + user;
// OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" +"./data/user.mdb");
// conn.Open();
// OleDbCommand cmd = new OleDbCommand(sql, conn);
// OleDbDataReader reader=cmd.ExecuteReader();
// if (reader.Read())
// {
// pass1 = reader["password"].ToString();
// }
// else
//{
// pass1=null;
// }
while (true)
{
try
{
Byte[] rec = new Byte[100];
//NetworkStream netstream = new NetworkStream(accsocket);
if (receiveCount>0)
{
//netstream.Read(rec, 0, rec.Length);
string recmessage = Encoding.UTF8.GetString(rec);
if (recmessage.Substring(0, 6) == "USER--")
{
recmessage = recmessage.Substring(6, 94).Trim('^');
listBox1.Items.Add("用户名:" + recmessage);
}
else
{
recmessage = recmessage.Substring(6, 94).Trim('^');
listBox1.Items.Add("密码:" + recmessage);
}
}
else
{
accsocket.Close();
break;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
accsocket.Close();
break;
} }
}
private void MainWorkThread(string str)
{
} private void button2_Click(object sender, EventArgs e)
{
} private void Form1_Load(object sender, EventArgs e)
{
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
}
------------------------------------------
客户端的:
namespace 客户端
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == "" || textBox2.Text == "")
{
MessageBox.Show("请输入用户名或密码!");
}
else
{
string strUser = string.Format("USER--{0}", textBox1.Text);
string strPass = string.Format("PASS--{0}", textBox2.Text);
CommunClass abc = new CommunClass();
Socket s = abc.ConnectToServer("127.0.0.1", 8888);
if (abc.WriteCommandToSocket(s, strUser) && abc.WriteCommandToSocket(s, strPass))
{
MessageBox.Show("发送成功");
}
else
{
MessageBox.Show("目前网络阻塞,验证信息发送不成功!");
}
}
}------------------------
public bool WriteCommandToSocket(Socket s, string strUser)
{ strUser = strUser.PadRight(USERLEN, FILLCHAR); return WriteTextToSocket1(s, strUser);
}
------------------------------