以下是客户端代码: package testsocket; //使用TCP协议一次性建立100次TCP连接 //本例的目的是试图测试建立TCP连接的速度是多少; //从实验结果来看,建立连接的速度很快平均小于1秒,每次连接之间的间隔的平均时间也小于1秒; //测试环境:花生壳动态域名解析,服务器端需运行服务程序; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; import javax.microedition.io.*; import java.io.*; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.Displayable;
public class Test extends MIDlet implements CommandListener{ private static Test instance; Display display; Command exitCmd; Command connectCmd; Form result; String serverUrl="socket://zhang-yin.vicp.net:4040"; String message; /** Constructor */ public Test() { display=Display.getDisplay(this); result=new Form("Get message"); exitCmd=new Command(".exit.",Command.EXIT,1); connectCmd=new Command("connected...",Command.SCREEN,1); result.addCommand(exitCmd); result.addCommand(connectCmd); result.setCommandListener(this); }
/** Main method */ public void startApp() { display.setCurrent(result); }
/** Handle pausing the MIDlet */ public void pauseApp() { }
/** Handle destroying the MIDlet */ public void destroyApp(boolean unconditional) { }
/** Quit the MIDlet */ public static void quitApp() { instance.destroyApp(true); instance.notifyDestroyed(); instance = null; }
public void commandAction(Command c, Displayable d) { if (c==exitCmd){ destroyApp(true); notifyDestroyed(); } else if (c==connectCmd){ try{
connect(serverUrl); } catch (Exception ex){} } }
void connect(String url) throws IOException{
try { for (int i = 0; i < 100; i++) { System.out.println("now:" + i); StreamConnection con = (StreamConnection) Connector.open(url); OutputStream os = con.openOutputStream(); int data; StringBuffer sb = new StringBuffer(); byte[] ff = new byte[12]; ff = "1234567890".getBytes(); os.write(ff); os.flush(); System.out.println("send ok"); if (os != null) os.close(); if (con != null) con.close(); } } finally { }
} }
以下是服务器端代码:
using System; using System.Drawing ; using System.Windows.Forms ; using System.Data ; using System.Net ; using System.Net.Sockets ; using System.Threading ; using System.IO;
namespace TcpServer { /// <summary> /// Form1 的摘要说明。 /// </summary> public class Server : System.Windows.Forms.Form { /// <summary> /// 必需的设计器变量。 /// </summary> private System.ComponentModel.Container components = null;
public Server() { // // Windows 窗体设计器支持所必需的 // InitializeComponent();
// // TODO: 在 InitializeComponent 调用后添加任何构造函数代码 // }
/// <summary> /// 清理所有正在使用的资源。 /// </summary> protected override void Dispose( bool disposing ) { if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); }
private bool doIt=true; private Thread startServer ; TcpListener serverListener; TcpClient tcpClient; System.Net.Sockets.NetworkStream netStream; private System.Windows.Forms.Button button1; private System.Windows.Forms.Button button2; private System.Windows.Forms.ListBox listBox1; private System.Windows.Forms.Button button3; int port=4040;
#region Windows 窗体设计器生成的代码 /// <summary> /// 设计器支持所需的方法 - 不要使用代码编辑器修改 /// 此方法的内容。 /// </summary> private void InitializeComponent() { this.button1 = new System.Windows.Forms.Button(); this.button2 = new System.Windows.Forms.Button(); this.listBox1 = new System.Windows.Forms.ListBox(); this.button3 = new System.Windows.Forms.Button(); this.SuspendLayout(); // // button1 // this.button1.Location = new System.Drawing.Point(32, 40); this.button1.Name = "button1"; this.button1.Size = new System.Drawing.Size(64, 24); this.button1.TabIndex = 0; this.button1.Text = "开始服务"; this.button1.Click += new System.EventHandler(this.button1_Click); // // button2 // this.button2.Location = new System.Drawing.Point(112, 40); this.button2.Name = "button2"; this.button2.Size = new System.Drawing.Size(64, 24); this.button2.TabIndex = 1; this.button2.Text = "停止服务"; this.button2.Click += new System.EventHandler(this.button2_Click); // // listBox1 // this.listBox1.ItemHeight = 12; this.listBox1.Location = new System.Drawing.Point(32, 72); this.listBox1.Name = "listBox1"; this.listBox1.Size = new System.Drawing.Size(344, 184); this.listBox1.TabIndex = 2; // // button3 // this.button3.Location = new System.Drawing.Point(304, 40); this.button3.Name = "button3"; this.button3.Size = new System.Drawing.Size(64, 24); this.button3.TabIndex = 3; this.button3.Text = "清空列表"; this.button3.Click += new System.EventHandler(this.button3_Click); // // Server // this.AutoScaleBaseSize = new System.Drawing.Size(6, 14); this.ClientSize = new System.Drawing.Size(400, 349); this.Controls.Add(this.button3); this.Controls.Add(this.listBox1); this.Controls.Add(this.button2); this.Controls.Add(this.button1); this.Name = "Server"; this.Text = "Tcp服务器程序"; this.Load += new System.EventHandler(this.Server_Load); this.ResumeLayout(false);
} #endregion
/// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { Application.Run(new Server()); }
public void StartListen()//侦听特定端口的用户请求 { serverListener.Start(); //启动侦听 while(doIt)//进入无限循环等待用户端连接 { try { tcpClient=serverListener.AcceptTcpClient() ;//创建客户端连接对象 netStream=tcpClient.GetStream() ;//得到网络流 //BinaryReader br=new BinaryReader(netStream); StreamReader sr=new StreamReader(netStream); string buffer=""; string received=""; received+=sr.ReadLine();//读流中一行 while(received.Length!=0) { buffer+=received; buffer+="\r\n"; received=sr.ReadLine(); if (received==null){received="";} } listBox1.Items.Add(buffer);//显示 } catch(Exception re) { MessageBox.Show(re.Message); } } //while netStream.Close(); tcpClient.Close(); }
public void run ( ) { //开一个线程 startServer = new Thread ( new ThreadStart ( StartListen ) ) ; //启动线程 startServer.Start ( ) ; }
private void button1_Click(object sender, System.EventArgs e) { //开始服务 doIt=true; this.button2.Enabled=true; button1.Enabled=false; run(); }
private void button2_Click(object sender, System.EventArgs e) { //停止服务 doIt=false; button1.Enabled=true; button2.Enabled=false; startServer.Abort(); serverListener.Stop(); }
private void Server_Load(object sender, System.EventArgs e) { try { serverListener=new TcpListener(IPAddress.Any,port);//创建TcpListener对象实例 } catch(Exception ex) { MessageBox.Show("Can‘t Start Server"+ex.Message); return; } }
private void button3_Click(object sender, System.EventArgs e) { this.listBox1.Items.Clear(); }
}//end class server } 
|