以下是客户端代码:
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
{
}
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
}
本文地址:http://com.8s8s.com/it/it34157.htm