求帮忙,为什么我这个同步套接字开发部能发送,接收到消息
最美的邂逅 2012-09-26 09:20:27 服务端
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 WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Socket socket;
Socket clientsocket;
private Thread thread;
private void button1_Click(object sender, EventArgs e)
{
this.listBox1.Items.Clear();
this.richTextBox1.Text = "";
this.richTextBox2.Text = "";
this.button1.Enabled = false;
IPAddress ip = IPAddress.Parse(this.textBox1 .Text );
IPEndPoint server = new IPEndPoint(ip ,Int32 .Parse (textBox2 .Text ));
socket= new Socket(AddressFamily .InterNetwork , SocketType.Stream ,ProtocolType .Tcp );
socket.Bind(server );
socket.Listen(10);
clientsocket = socket.Accept();
this.listBox1.Items.Add("与客户"+clientsocket .RemoteEndPoint .ToString ()+"建立连接");
thread = new Thread(new ThreadStart (acceptmessage ));
}
private void acceptmessage()
{
NetworkStream netstream = new NetworkStream(clientsocket );
while (true )
{
try
{
byte[] datasize = new byte[4];
netstream.Read(datasize ,0,4);
int size = System.BitConverter.ToInt32(datasize ,0) ;
byte [] message=new byte [size ];
int datalefa = size;
int start = 0;
while (datalefa >0)
{
int recv = netstream.Read(message,start ,datalefa );
}
this.richTextBox1.Rtf = System.Text.Encoding.Unicode.GetString(message );
}
catch
{
this.listBox1.Items.Add("与客户端连接中断");
break;
}
}
}
private void button3_Click(object sender, EventArgs e)
{
this.button3.Enabled = false;
try
{
socket.Close();
if (clientsocket .Connected )
{
clientsocket.Shutdown(SocketShutdown.Both );
clientsocket.Close();
thread.Abort();
}
}
catch
{
MessageBox.Show("监听未开始,关闭无效");
}
}
private void button2_Click(object sender, EventArgs e)
{
string str = this.richTextBox2.Rtf;
int i = str.Length;
if (i == 0)
{
return;
}
else
{
i *= 2;
}
byte[] datasize = new byte[4];
datasize = System.BitConverter.GetBytes(i );
byte[] sendbytes = System.Text.Encoding.Unicode.GetBytes(str );
try
{
NetworkStream netstream = new NetworkStream(clientsocket );
netstream.Write(datasize ,0,4);
netstream.Write(sendbytes ,0,sendbytes .Length );
netstream.Flush();
this.richTextBox2.Rtf = "";
}
catch
{
MessageBox.Show("无法发送");
}
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
socket.Close();
if (clientsocket.Connected )
{
clientsocket.Shutdown(SocketShutdown.Both );
clientsocket.Close();
thread.Abort();
}
}
catch
{ }
}
}
}
客户端
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 WindowsApplication2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private Socket socket;
private Thread thread;
private void button1_Click(object sender, EventArgs e)
{
IPAddress ip = IPAddress.Parse(textBox1.Text);
IPEndPoint server = new IPEndPoint(ip, Int32.Parse(textBox2.Text));
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Connect(server);
}
catch
{
MessageBox.Show("与服务器连接失败");
return;
}
this.button1.Enabled = false;
this.listBox1.Items.Add("与服务器连接成功");
thread = new Thread(new ThreadStart(acceptmessage ));
}
private void acceptmessage()
{
NetworkStream netstream = new NetworkStream(socket);
while (true)
{
try
{
byte[] datasize = new byte[4];
netstream.Read(datasize, 0, 4);
int size = System.BitConverter.ToInt32(datasize, 0);
byte[] message = new byte[size];
int dataleft = size;
int start = 0;
while (dataleft > 0)
{
int recv = netstream.Read(message, 0, 4);
start += recv;
dataleft -= recv;
}
this.richTextBox1.Rtf = System.Text.Encoding.Unicode.GetString(message);
}
catch
{
this.listBox1.Items.Add("与服务器链接断开");
break;
}
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
this.listBox1.Items.Add("与主机断开连接");
thread.Abort();
}
catch
{
MessageBox.Show("未与服务器主机连接,断开无效");
}
this.button3.Enabled = true;
}
private void Form1_Load(object sender, EventArgs e)
{
try
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
catch
{ }
}
private void button2_Click(object sender, EventArgs e)
{
string str = this.richTextBox2.Rtf;
int i = str.Length;
if (i == 0)
{
return;
}
else
{
i *= 2;
}
byte[] datasize = new byte[4];
datasize = System.BitConverter.GetBytes(i);
byte[] sendbytes = System.Text.Encoding.Unicode.GetBytes(str);
try
{
NetworkStream netstream = new NetworkStream(socket );
netstream.Write(datasize, 0, 4);
netstream.Write(sendbytes, 0, sendbytes.Length);
netstream.Flush();
this.richTextBox2.Text = "";
}
catch
{
MessageBox.Show("无法发送");
}
}
}
}