程序代码
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data ;
using System.Net.Sockets ;
using System.IO ;
using System.Threading ;
using System.Net ;
namespace Server
{
public class Form1 : Form
{
private ListBox ListBox1 ;
private Button button2 ;
private Label label1 ;
private TextBox textBox1 ;
private Button button1 ;
private Socket socketForClient;
private NetworkStream networkStream ;
private TcpListener tcpListener;
private StreamWriter streamWriter=null ;
private StreamReader streamReader=null ;
private Thread _thread1;
private System.Windows.Forms.Button button3;
private System.ComponentModel.Container components = null;
private void Listen ( )
{
//创建一个tcpListener对象,此对象主要是对给定端口进行侦听
tcpListener = new TcpListener ( 1234 ) ;
//开始侦听
tcpListener.Start ( ) ;
//返回可以用以处理连接的Socket实例
socketForClient = tcpListener.AcceptSocket ( ) ;
try
{
//如果返回值是"true",则产生的套节字已经接受来自远方的连接请求
if ( socketForClient.Connected )
{
ListBox1.Items.Add ( "已经和客户端成功连接!" ) ;
while ( true )
{
//创建networkStream对象通过网络套节字来接受和发送数据
networkStream = new NetworkStream ( socketForClient,true) ;
//从当前数据流中读取一行字符,返回值是字符串
streamReader = new StreamReader ( networkStream ) ;
string msg = streamReader.ReadLine ( ) ;
ListBox1.Items.Add ( "收到客户端信息:" + msg ) ;
streamWriter = new StreamWriter ( networkStream ) ;
if ( textBox1.Text != "" )
{
ListBox1.Items.Add ( "往客户端反馈信息:" + textBox1.Text ) ;
//往当前的数据流中写入一行字符串
streamWriter.WriteLine ( textBox1.Text ) ;
//刷新当前数据流中的数据
streamWriter.Flush ( ) ;
}
}
}
}
catch ( Exception ey )
{
MessageBox.Show ( ey.ToString ( ) ) ;
}
}
private void Form1_Closed(object sender, System.EventArgs e)
{
this.networkStream.Close ( ) ;
streamReader.Close ( ) ;
streamWriter.Close ( ) ;
_thread1.Abort ( ) ;
tcpListener.Stop ( ) ;
socketForClient.Shutdown( SocketShutdown.Both ) ;
socketForClient.Close () ;
}
private void button1_Click(object sender, System.EventArgs e)
{
ListBox1.Items .Add ( "服务已经启动!" ) ;
_thread1 = new Thread ( new ThreadStart ( Listen ) ) ;
_thread1.Start ( ) ;
}
}
}
------------------------
this.networkStream.Close ( ) ;
streamReader.Close ( ) ;
streamWriter.Close ( ) ;
_thread1.Abort ( ) ;
tcpListener.Stop ( ) ;
socketForClient.Shutdown( SocketShutdown.Both ) ;
socketForClient.Close () ;
这几行总是提示“未将对象引用设置到对象的实例” 请高手帮帮忙
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data ;
using System.Net.Sockets ;
using System.IO ;
using System.Threading ;
using System.Net ;
namespace Server
{
public class Form1 : Form
{
private ListBox ListBox1 ;
private Button button2 ;
private Label label1 ;
private TextBox textBox1 ;
private Button button1 ;
private Socket socketForClient;
private NetworkStream networkStream ;
private TcpListener tcpListener;
private StreamWriter streamWriter=null ;
private StreamReader streamReader=null ;
private Thread _thread1;
private System.Windows.Forms.Button button3;
private System.ComponentModel.Container components = null;
private void Listen ( )
{
//创建一个tcpListener对象,此对象主要是对给定端口进行侦听
tcpListener = new TcpListener ( 1234 ) ;
//开始侦听
tcpListener.Start ( ) ;
//返回可以用以处理连接的Socket实例
socketForClient = tcpListener.AcceptSocket ( ) ;
try
{
//如果返回值是"true",则产生的套节字已经接受来自远方的连接请求
if ( socketForClient.Connected )
{
ListBox1.Items.Add ( "已经和客户端成功连接!" ) ;
while ( true )
{
//创建networkStream对象通过网络套节字来接受和发送数据
networkStream = new NetworkStream ( socketForClient,true) ;
//从当前数据流中读取一行字符,返回值是字符串
streamReader = new StreamReader ( networkStream ) ;
string msg = streamReader.ReadLine ( ) ;
ListBox1.Items.Add ( "收到客户端信息:" + msg ) ;
streamWriter = new StreamWriter ( networkStream ) ;
if ( textBox1.Text != "" )
{
ListBox1.Items.Add ( "往客户端反馈信息:" + textBox1.Text ) ;
//往当前的数据流中写入一行字符串
streamWriter.WriteLine ( textBox1.Text ) ;
//刷新当前数据流中的数据
streamWriter.Flush ( ) ;
}
}
}
}
catch ( Exception ey )
{
MessageBox.Show ( ey.ToString ( ) ) ;
}
}
private void Form1_Closed(object sender, System.EventArgs e)
{
this.networkStream.Close ( ) ;
streamReader.Close ( ) ;
streamWriter.Close ( ) ;
_thread1.Abort ( ) ;
tcpListener.Stop ( ) ;
socketForClient.Shutdown( SocketShutdown.Both ) ;
socketForClient.Close () ;
}
private void button1_Click(object sender, System.EventArgs e)
{
ListBox1.Items .Add ( "服务已经启动!" ) ;
_thread1 = new Thread ( new ThreadStart ( Listen ) ) ;
_thread1.Start ( ) ;
}
}
}
------------------------
this.networkStream.Close ( ) ;
streamReader.Close ( ) ;
streamWriter.Close ( ) ;
_thread1.Abort ( ) ;
tcpListener.Stop ( ) ;
socketForClient.Shutdown( SocketShutdown.Both ) ;
socketForClient.Close () ;
这几行总是提示“未将对象引用设置到对象的实例” 请高手帮帮忙
解决方案 »
- 请前辈出招!高校招普通管理人员,出5分钟左右计算机基础面试题,可客观的也可以谈宏观的都可以!
- Winio如何模拟按键操作?
- 太有疑问了这个……
- 据说vs.net2005中可以实现窗体的自动停靠,用过的朋友请指点一下...
- 在存储过程中同时插入两个表,如何在存储过程中写一个事务处理呢?当任一个表不能插入成功,则回滚。
- System.UnauthorizedAccessException异常
- 可以将内含图片的文本写入数据库吗?
- gridview 导出到OFFICE2010
- 请问有那位使用过MicrosoftUpdaterApplicationBlock?
- 关于时期型转int型的问题?
- 无法识别配置节点。。
- 字符串==问题
{
if (networkStream == null) return;
this.networkStream.Close ( ) ;
streamReader.Close ( ) ;
streamWriter.Close ( ) ;
_thread1.Abort ( ) ;
tcpListener.Stop ( ) ;
socketForClient.Shutdown( SocketShutdown.Both ) ;
socketForClient.Close () ;
}
首先,关闭线程;
其次,关闭线程所牵扯的资源(除socket外);
然后,关闭socket资源;
最后关闭tcp资源。
此外关闭的时候,需要判断各个资源是否有效。