?? listenserve.java
字號:
/*
java編寫TCP方式的通信程序
Java API中封裝了大量的函數,供編寫網絡通信程序時使用.
這使得java在網絡方面具有強大的功能.
用java編寫TCP方式的通信程序比較簡單,但也有一些問題需要注意.
以下為監聽主程序,監聽程序在發現客戶端連接后,啟動一個會話socket線程,以實現實時發送,接收信息
和多客戶端同時工作.
總的來說,以上所列代碼較為簡單,但已基本反映出java編寫簡單tcp通信程序的原理.
希望各位朋友批評.大家共同學習交流.
*/
package a;
import java.io.*;
import java.lang.*;
import java.net.ServerSocket;
import java.net.Socket;
//import java.io.*;
//import java.lang.*;
//import java.net.ServerSocket;
//import java.net.Socket;
import java.net.SocketException;
//主程序一直處于監聽狀態,有連接則啟動一個線程進行處理,以實現多個客戶端
public class Listenserve
{
private ServerSocket ss;
private boolean listening=true;
public Listenserve()
{
System.out.println("Server is start...");
Init();//初始化
lisn();//啟動監聽
}
public void Init()
{
try
{
ss=new ServerSocket(10015,10);
}
catch(IOException ie)
{
System.out.println("無法在10015端口監聽");
ie.printStackTrace();
}
}
public void lisn()
{
try
{
while(listening)
new Thread(new Dialogserve(ss.accept())).start();
}
catch(IOException ie)
{ie.printStackTrace();}
}
public static void main(String args[])
{
new Listenserve();
}
}
//以下為會話主程序
//應該特別注意,如果客戶端先關閉,會話socket中可能拋出socketexception:connection reset
//這應該在程序中進行處理,這也是較易忽略的問題.
class Dialogserve implements Runnable
{
private Socket s;
private InputStream in;
private String rev,temp;
private byte b[];
private int len;
public Dialogserve(Socket ss)
{
s=ss;
b=new byte[1024];
try
{
in=s.getInputStream();
}catch(IOException ie)
{
ie.printStackTrace();
}
rev="";
}
public void run()
{
try
{
while(s.isConnected()==true)
{
if((len=in.read(b))!=-1)
{
temp=new String(b,0,len);
rev+=temp;
System.out.print(rev);
temp=null;
Thread.sleep(100);
}
}
in.close();
s.close();
System.out.println("會話socket已斷開!");
}
catch(SocketException se)
{
System.out.println("客戶端已斷開!");
System.exit(0);
}
catch(IOException io)
{
io.printStackTrace();
System.exit(0);
}
catch(InterruptedException ire)
{ ire.printStackTrace();}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -