模拟了一个聊天的程序,通过xml通讯,以下是server端,及client端的部分代码。
server端:
public class Server {
private ServerSocket ss;
private Socket socket;
ServerFrame serverFrame = null;
public Server(ServerFrame serverFrame) {
this.serverFrame = serverFrame;
try {
/*新建套接字服务器*/
ss = new ServerSocket(ConfigFactory.getInstance().getLocal_port());
while (true) {
try{
/*侦听并接受到此套接字的连接,接受到的链接扔到新建的thread处理*/
socket = ss.accept();
new CreateServerThread(socket,serverFrame).start();
}catch(Exception e){
throw new Exception();
}
}
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e1){
e1.printStackTrace();
}finally{
if(ss!=null){
try{
ss.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
public class CreateServerThread extends Thread{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
ServerFrame serverFrame;
public CreateServerThread(Socket s,ServerFrame serverFrame) throws Exception{
this.socket = s;
this.serverFrame = serverFrame;
}
public void run(){
try{
/*侦听并接受到此套接字的连接*/
/*返回此套接字的输入流--(字节流转换为字符流,并且从字符输入流中读取文本)*/
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
/*返回此套接字的输出流*/
out = new PrintWriter(socket.getOutputStream(), true);
/*读取BufferedReader中的字符流*/
String line=null;
StringBuffer sb = new StringBuffer();
while((line=in.readLine())!=null){
sb.append(line+"\n");
}
/*读取一个文本行*/
line = sb.toString();
/*接受socket端发送过来的信息,并显示在页面上*/
MessageForm message = new ParseXml().parse(line);
serverFrame.setText(message.getName() + " 说: " + message.getTime() + "\n " + message.getContent() + "\n");
}catch(Exception e){
e.printStackTrace();
}finally{
if(out!=null){
try{
in.close();
}catch(Exception e){
e.printStackTrace();
}
out.close();
}
if(in!=null){
try{
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(socket!=null){
try{
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
client端:
public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client(String server_ip,int server_port,String str) {
try {
this.init(str);
/*创建一个流套接字并将其连接到指定主机上的指定端口号*/
socket = new Socket(server_ip, server_port);
/*返回此套接字的输入流--(字节流转换为字符流,并且从字符输入流中读取文本)*/
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
/*返回此套接字的输出流*/
out = new PrintWriter(socket.getOutputStream(), true);
// BufferedReader line = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(str.getBytes())));
BufferedReader line = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\oneXml.xml")));
out.println(line.readLine());
line.close();
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public InputStream init(String message){
BuildXml bx = new BuildXml();
MessageForm form = new MessageForm();
String tempPath = "d:\\oneXml.xml";
form.setContent(message);
form.setIp("127.0.0.1");
form.setName("大脸猫");
form.setTime(new SimpleDateFormat("yyyy/MM/dd hh:mm").format(new Date()).toString());
return null;
}
}
server端:
public class Server {
private ServerSocket ss;
private Socket socket;
ServerFrame serverFrame = null;
public Server(ServerFrame serverFrame) {
this.serverFrame = serverFrame;
try {
/*新建套接字服务器*/
ss = new ServerSocket(ConfigFactory.getInstance().getLocal_port());
while (true) {
try{
/*侦听并接受到此套接字的连接,接受到的链接扔到新建的thread处理*/
socket = ss.accept();
new CreateServerThread(socket,serverFrame).start();
}catch(Exception e){
throw new Exception();
}
}
} catch (IOException e) {
e.printStackTrace();
}catch(Exception e1){
e1.printStackTrace();
}finally{
if(ss!=null){
try{
ss.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
public class CreateServerThread extends Thread{
private Socket socket;
private BufferedReader in;
private PrintWriter out;
ServerFrame serverFrame;
public CreateServerThread(Socket s,ServerFrame serverFrame) throws Exception{
this.socket = s;
this.serverFrame = serverFrame;
}
public void run(){
try{
/*侦听并接受到此套接字的连接*/
/*返回此套接字的输入流--(字节流转换为字符流,并且从字符输入流中读取文本)*/
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
/*返回此套接字的输出流*/
out = new PrintWriter(socket.getOutputStream(), true);
/*读取BufferedReader中的字符流*/
String line=null;
StringBuffer sb = new StringBuffer();
while((line=in.readLine())!=null){
sb.append(line+"\n");
}
/*读取一个文本行*/
line = sb.toString();
/*接受socket端发送过来的信息,并显示在页面上*/
MessageForm message = new ParseXml().parse(line);
serverFrame.setText(message.getName() + " 说: " + message.getTime() + "\n " + message.getContent() + "\n");
}catch(Exception e){
e.printStackTrace();
}finally{
if(out!=null){
try{
in.close();
}catch(Exception e){
e.printStackTrace();
}
out.close();
}
if(in!=null){
try{
in.close();
}catch(Exception e){
e.printStackTrace();
}
}
if(socket!=null){
try{
socket.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
client端:
public class Client {
Socket socket;
BufferedReader in;
PrintWriter out;
public Client(String server_ip,int server_port,String str) {
try {
this.init(str);
/*创建一个流套接字并将其连接到指定主机上的指定端口号*/
socket = new Socket(server_ip, server_port);
/*返回此套接字的输入流--(字节流转换为字符流,并且从字符输入流中读取文本)*/
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
/*返回此套接字的输出流*/
out = new PrintWriter(socket.getOutputStream(), true);
// BufferedReader line = new BufferedReader(new InputStreamReader(new ByteArrayInputStream(str.getBytes())));
BufferedReader line = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\oneXml.xml")));
out.println(line.readLine());
line.close();
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public InputStream init(String message){
BuildXml bx = new BuildXml();
MessageForm form = new MessageForm();
String tempPath = "d:\\oneXml.xml";
form.setContent(message);
form.setIp("127.0.0.1");
form.setName("大脸猫");
form.setTime(new SimpleDateFormat("yyyy/MM/dd hh:mm").format(new Date()).toString());
return null;
}
}