當前位置:編程學習大全網 - 編程語言 - Javacsocket編程

Javacsocket編程

服務器端:

包com . lqq . service;

導入Java . io . file;

導入Java . io . io exception;

導入Java . io . objectinputstream;

導入Java . io . object output stream;

導入Java . net . socket;

導入Java . util . list;

導入com . lqq . VO . query type;

導入com . lqq . VO . student;

公共類DealClientRequest實現Runnable?

{

私有套接字s = null

private parser XML p = new parser XML(new File(" students . XML "));

公共DealClientRequest(套接字)

{

this.s = s

}

@覆蓋

public void run()?

{

如果(s!=空)

{

試試?

{

ObjectInputStream ois = new ObjectInputStream(s . getinputstream());

object output stream OOS = new object output stream(s . get output stream());

query type Qt =(query type)ois . read object();

if(Qt . getquery type()= = 1)//單壹查詢

{

System.out.println("執行單壹查詢,查詢名稱= "+Qt . getquery name());

student stu = p . get student(Qt . getquery name());

OOS . writeobject(stu);

} else if(Qt . getquery type()= = 2)//全部檢查。

{

System.out.println("執行全面檢查");

列表& lt學生& gtlist = p . getallstudent();

for(int I = 0;我& ltlist . size();i++)

{

student stu = list . get(I);

OOS . writeobject(stu);

}

}

} catch (IOException e)

{

e . printstacktrace();

} catch (ClassNotFoundException e)

{

e . printstacktrace();

}

}

}

}

*************************

包com . lqq . service;

導入Java . io . io exception;

導入Java . net . server socket;

導入Java . net . socket;

公共類MainService

{

私有服務器套接字ss;

public void startService()拋出IOException

{

ss = new server socket(10086);

while(真)

{

System.out.println("服務器在10086等待...");

socket s = ss . accept();

新線程(新的DealClientRequest)。start();

System.out.println("處理線程成功啟動");

}

}

}

******************

包com . lqq . service;

導入Java . io . file;

導入Java . util . ArrayList;

導入Java . util . list;

導入javax . XML . parsers . document builder;

導入javax . XML . parsers . documentbuilderfactory;

import javax . XML . parsers . parser configuration exception;

導入org . W3C . DOM . document;

導入org . W3C . DOM . element;

導入org . W3C . DOM . nodelist;

導入org . W3C . DOM . text;

導入com . lqq . VO . student;

公共類ParserXML?

{

私有DocumentBuilderFactory bdf

私有DocumentBuilder db

私有文檔dom

公共ParserXML(文件File)

{

BDF = documentbuilderfactory . new instance();

試試?

{

db = BDF . newdocumentbuilder();

dom = db.parse(文件);

} catch(例外e)?

{

e . printstacktrace();

}

}

公共列表& lt學生& gtgetAllStudent()

{

列表& lt學生& gtstu = new ArrayList & lt學生& gt();

element root = DOM . getdocumentelement();

NodeList list = root . getelementsbytagname(" stu ");

for(int I = 0;我& ltlist . getlength();i++)

{

Element e =(Element)list . item(I);

Student st =新生();

NodeList names = e . getelementsbytagname(" name ");

if(names.getLength() == 1)

{

Element name =(Element)names . item(0);

Text Text =(Text)name . get first child();

ST . setstname(text . getnodevalue());

}

NodeList sexs = e . getelementsbytagname(" sex ");

if(sexs.getLength() == 1)

{

Element name =(Element)sexs . item(0);

Text Text =(Text)name . get first child();

ST . setstuegeng(text . getnodevalue());

}

NodeList ages = e . getelementsbytagname(" age ");

if(ages.getLength() == 1)

{

Element name =(Element)ages . item(0);

Text Text =(Text)name . get first child();

ST . sets tuage(integer . parse int(text . getnodevalue()));

}

NodeList class s = e . getelementsbytagname(" class ");

if(classs.getLength() == 1)

{

Element name =(Element)classs . item(0);

Text Text =(Text)name . get first child();

ST . setstuclassname(text . get nodevalue());

}

stu . add(ST);

}

返回stu

}

公共學生getStudent(字符串stuName)

{

列表& lt學生& gtlist = this . getall student();

for(int I = 0;我& ltlist . size();i++)

{

student ST = list . get(I);

if(st.getStuName()。equals(stuName))

返回ST;

}

返回null

}

}

*************

包com . lqq . service;

導入Java . io . io exception;

公開課服務?

{

public static void main(String[]args)?

{

main service ms = new main service();

試試?

{

ms . startservice();

} catch (IOException e)?

{

e . printstacktrace();

}

}

}

*******

包com . lqq . VO;

導入Java . io . serializable;

公共類QueryType實現可序列化

{

private static final long serialVersionUID = 8713870836629046060 l;

/**

* 1單項檢查

* 2全面調查

*/

私有字節queryType

私有字符串queryName

公共字節getQueryType()

{

返回queryType

}

public void setQueryType(字節查詢類型)?

{

this . query type = query type;

}

公共字符串getQueryName()?

{

返回queryName

}

public void setQueryName(String字符串)?

{

this.queryName = string

}

}

************

包com . lqq . VO;

導入Java . io . serializable;

公共類學生實現可序列化

{

private static final long serialVersionUID =-6087251613589160139 l;

私有字符串stuName

私立學校;

私有字符串stuGender

私有字符串stuClassName

@覆蓋

公共字符串toString()?

{

return " Name:"+Stuname+" \ t gender:"+stu gender?

+" \ tAge:"+stu age+" \ t class:"+stu class name;

}

公共字符串getStuName()?

{

返回stuName

}

public void setStuName(String stuName)?

{

this . stun ame = stun ame;

}

public int getStuAge()?

{

返程;

}

public void setStuAge(int stuAge)?

{

this . stu age = stu age;

}

公共字符串getStuGender()?

{

返回stuGender

}

public void setstuggeng(String stuggeng)?

{

this . stu gender = stu gender;

}

公共字符串getStuClassName()?

{

返回stuClassName

}

public void setStuClassName(String stuClassName)?

{

this . stu class name = stu class name;

}

}

*************

& lt?xml版本="1.0 "編碼="UTF-8 "?& gt

& ltstus & gt

& lt斯圖& gt

& lt名稱& gt令狐沖;

& lt年齡& gt12 & lt;/age & gt;

& ltclass & gt華山學校。

& lt性& gt男性

& lt/stu & gt;

& lt斯圖& gt

& lt名稱& gt東方不敗;

& lt年齡& gt22 & lt/age & gt;

& ltclass & gt日月神道教

& lt性& gt女性

& lt/stu & gt;

& lt斯圖& gt

& lt名稱& gt嶽不群;

& lt年齡& gt23 & lt/age & gt;

& ltclass & gt華山學校。

& lt性& gt惡魔

& lt/stu & gt;

& lt斯圖& gt

& lt名稱& gt風是清澈的

& lt年齡& gt88 & lt/age & gt;

& ltclass & gt華山學校。

& lt性& gt男性

& lt/stu & gt;

& lt/stus & gt;

& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp& amp

客戶:

包com . lqq . c;

導入Java . io . io exception;

導入Java . io . objectinputstream;

導入Java . io . object output stream;

導入Java . net . socket;

導入Java . net . unknownhostexception;

導入com . lqq . VO . query type;

導入com . lqq . VO . student;

公共類AllQuery實現Runnable

{

私有套接字s;

公共AllQuery(QueryType qt)

{

試試?

{

s =新套接字(" localhost ",10086);

object output stream OOS = new object output stream(s . get output stream());

OOS . writeobject(Qt);

} catch (UnknownHostException e)?

{

e . printstacktrace();

} catch (IOException e)?

{

e . printstacktrace();

}

}

@覆蓋

public void run()?

{

如果(s!=空)

{

試試?

{

ObjectInputStream ois = new ObjectInputStream(s . getinputstream());

學生stu =(學生)ois . read object();

客戶端c =新客戶端();

而(斯圖!=空)

{

c . showstudentinfo(stu);

stu =(學生)ois . read object();

}

} catch (IOException e)?

{

e . printstacktrace();

} catch (ClassNotFoundException e)?

{

e . printstacktrace();

}

}

}

}

**************

包com . lqq . c;

導入Java . io . io exception;

導入Java . io . objectinputstream;

導入Java . io . object output stream;

導入Java . net . socket;

導入Java . util . scanner;

導入com . lqq . VO . query type;

導入com . lqq . VO . student;

公共類客戶端?

{

public void showStudentInfo(學生stu)

{

如果(斯圖!=空)

{

system . out . println(stu);

}

}

公共void showMenu()

{

System.out.println("\t\t food?單身”);

System.out.println("\t1。單個查詢”);

System.out.println("\t2。全部勾選”);

System.out.println("\t0。退出”);

}

公共字符串getUserInput()

{

掃描儀掃描=新掃描儀(system . in);

system . out . println(" Please enter:");

返回scan . next();

}

public void requestQuery(字符串userSelect)

{

if(userSelect!=空)

{

if("1 "。equals(userSelect.trim()))

{

query type Qt = new query type();

qt.setQueryType((字節)1);

Scanner san =新掃描儀(system . in);

System.out.println("請輸入查詢的學生姓名:");

string query stuname = San . next();

Qt . setqueryname(query stuname);

this . execute queury(Qt);

}else if("2 "。equals(userSelect.trim()))

{

query type Qt = new query type();

qt.setQueryType((字節)2);

this . execute queury(Qt);

}else if("0 "。equals(userSelect.trim()))

{

system . exit(0);

}

其他

{

System.out.println("輸入錯誤");

}

}

}

公共void執行權限(查詢類型qt)

{

試試?

{

Socket s = new Socket("localhost ",10086);

object output stream OOS = new object output stream(s . get output stream());

OOS . writeobject(Qt);

System.out.println("請求已發送");

ObjectInputStream ois = new ObjectInputStream(s . getinputstream());

if(qt.getQueryType() == 1)

{

學生stu =(學生)ois . read object();

showStudentInfo(stu);

}else if(qt.getQueryType() == 2)

{

新線程(新AllQuery(qt))。start();

}

} catch (IOException e)?

{

e . printstacktrace();

} catch (ClassNotFoundException e)?

{

e . printstacktrace();

}

}

public static void main(String[]args)?

{

Client客戶端=新客戶端();

while(真)

{

client . showmenu();

client . request query(client . getuser input());

}

}

}

**********

包com . lqq . VO;

導入Java . io . serializable;

公共類QueryType實現可序列化

{

private static final long serialVersionUID = 8713870836629046060 l;

/**

* 1單項檢查

* 2全面調查

*/

私有字節queryType

私有字符串queryName

公共字節getQueryType()

{

返回queryType

}

public void setQueryType(字節查詢類型)?

{

this . query type = query type;

}

公共字符串getQueryName()?

{

返回queryName

}

public void setQueryName(String字符串)?

{

this.queryName = string

}

}

**********

包com . lqq . VO;

導入Java . io . serializable;

公共類學生實現可序列化

{

private static final long serialVersionUID =-6087251613589160139 l;

私有字符串stuName

私立學校;

私有字符串stuGender

私有字符串stuClassName

@覆蓋

公共字符串toString()?

{

return " Name:"+Stuname+" \ t gender:"+stu Geng?

+" \ tAge:"+stu age+" \ t class:"+stu class name;

}

公共字符串getStuName()?

{

返回stuName

}

public void setStuName(String stuName)?

{

this . stun ame = stun ame;

}

public int getStuAge()?

{

返程;

}

public void setStuAge(int stuAge)?

{

this . stu age = stu age;

}

公共字符串getStuGender()?

{

返回stuGender

}

public void setstuggeng(String stuggeng)?

{

this . stu gender = stu gender;

}

公共字符串getStuClassName()?

{

返回stuClassName

}

public void setStuClassName(String stuClassName)?

{

this . stu class name = stu class name;

}

}

時間太緊,代碼不完善,基本功能都實現了,代碼沒有優化。可以自己改,希望對妳有幫助。

  • 上一篇:三菱和法蘭克的編程方式有啥區別?
  • 下一篇:顫動編程視頻
  • copyright 2024編程學習大全網