读书人

一段C#代码求改错,该如何处理

发布时间: 2012-05-11 12:55:37 作者: rapoo

一段C#代码,求改错

C# code
using System.Net;using System.Net.Sockets;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;namespace yibutaojie{    public partial class Form1 : Form    {        public Form1()        {            InitializeComponent();        }        StateObject state;        private void button2_Click(object sender, System.EventArgs e)        {            IPAddress ipAddress = IPAddress.Parse("127.0.0.1");            IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 2012);            Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);            try            {                serverSocket.Bind(localEndPoint);                serverSocket.Listen(100);                serverSocket.BeginAccept(new AsyncCallback(AcceptCallback), serverSocket);            }            catch (Exception ee)            {                Console.WriteLine(ee.ToString());            }        }        public void AcceptCallback(IAsyncResult ar)        {            Socket serverSocket = (Socket)ar.AsyncState;            Socket clientSocket = serverSocket.EndAccept(ar);            state = new StateObject();            state.workSocket = clientSocket;            Send("连接服务器成功");            clientSocket.BeginReceive(state.buffer,0,StateObject.BufferSize,0,new AsyncCallback(ReadCallback),state);        }        public void ReadCallback(IAsyncResult ar)        {            StateObject state = (StateObject)ar.AsyncState;            Socket clientSocket = state.workSocket;            int bytesRead = clientSocket.EndReceive(ar);            if (bytesRead > 0)            {                String str = Encoding.Unicode.GetString(state.buffer, 0, bytesRead);                textBox1.AppendText("客户端对服务器说:" + str + "\r\n");            }                clientSocket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReadCallback), state);            }            private void Send(String data)            {                byte[] byteData=Encoding.Unicode.GetBytes(data);                state.workSocket.BeginSend(byteData,0,byteData.Length,0,new AsyncCallback(SendCallback),state);            }            private void SendCallback(IAsyncResult ar)           {                try               {                   Socket clientSocket=(Socket) ar.AsyncState;                   int bytesSent=clientSocket.EndSend(ar);               }               catch(Exception e)               {                   Console.WriteLine(e.ToString());               }           }           private void button1_Click(object sender,System.EventArgs e)          {              textBox1.AppendText("服务器对客户端说:"+textBox2.Text+"\r\n");              Send(textBox2.Text);           }          private void Form1_Closing(object sender,System.ComponentModel.CancelEventArgs e)         {             try             {                 state.workSocket.Shutdown(SocketShutdown.Both);                 state.workSocket.Close();             }             catch (Exception){}         }        }    public class StateObject    {        public Socket workSocket = null;        public const int BufferSize = 1024;        public byte[] buffer = new byte[BufferSize];    }}提示说是“未将对象引用设置到对象的实例”,我查不出错,求高手指点。


[解决办法]
C# code
serverSocket.BeginAccept(new AsyncCallback([color=#FF0000]AcceptCallback[/color]), serverSocket);
[解决办法]
这种东西自己调试,报错那行,自己看谁是null
------解决方案--------------------


建议你用控制台程序改写一下

读书人网 >C#

热点推荐