首先搞一个多线程的服务器端出来先:
思路:new 一个server 在一个死循环中不断检测socket连接,每简历一个连接就将它放入一个列表,并启动服务线程服务。
**
具体注释看程序啦。。SA没给我什么技术,但是规范的也学到5少。。
package com.sun.server;
/**
* @author Sun.zhong.
* @version 1.0
*/
import java.net.*;
import java.util.ArrayList;
import java.io.*;
/**
* @param client :socket object.
* @param ArrayList : list for all the socket connetions.
*
*/
public class Server2 extends Thread {
private Socket client;
private ArrayList list;
public Server2(Socket c,ArrayList list) {
this.list = list;
this.client = c;
}
/**
* override the methord run().
*
*/
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
while (true) {
String data = in.readLine();
/**
* update the information pool here.
* InformationManager.setData(data);
*/
/**
* list all the socket and send the message to the client .
*/
for(int i =0;i<list.size();i++){
Socket socket = (Socket)list.get(i);
if(socket != this.client){
/**
* broadcast the message from the information pool.
* PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(InformationManager.getData());
*/
//broadcast the message from the client..
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(data);
out.flush();
}
}
if (data.equals("end"))
break;
}
client.close();
} catch (IOException ex) {
} finally {
}
}
/**
* entrance to the app.
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1000);
ArrayList list = new ArrayList();
int i = 0;
while (true) {
// transfer location change Single User or Multi User
Socket socket = server.accept();
i++;
list.add(socket);
System.out.println("第 "+i+" 个client 建立连接");
Server2 mu = new Server2(socket,list);
mu.start();
}
}
}
**
**
2. 服务器端就是甘啦。。。宜家到客户端:
客户端相对简单,只要将信息的读取同信息的发送分开线程来做就不会导致阻塞啦。。。
**
package com.sun.client;
/**
* @author Sun.zhong
* @version 1.0
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*
* @param server:Socket object.
*
*/
public class Clients {
static Socket server;
/**
* entrance to the client.
* @param args
* @throws UnknownHostException
* @throws IOException
*/
public static void main(String args[]) throws UnknownHostException, IOException{
server=new Socket(InetAddress.getLocalHost(),1000);
**
BufferedReader br=new BufferedReader(new InputStreamReader(server.getInputStream()));
/**
* start the get data thread.
*/
Clients c = new Clients();
GetDataThread gdt = c.new GetDataThread(br);
gdt.start();
/**
* read data from server.
*/
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true){
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end")){
break;
}
}
}
class GetDataThread extends Thread{
private BufferedReader br;
public GetDataThread(BufferedReader br){
this.br = br;
}
public void run(){
try {
while(true){
System.out.println(br.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
**
记录:
hihi
hello
在搞毛
没搞毛
顶
顶毛
哈哈
哈毛
顶你个肺
顶你个肺
顶你个肺
**
打完,收工!。
思路:new 一个server 在一个死循环中不断检测socket连接,每简历一个连接就将它放入一个列表,并启动服务线程服务。
**
具体注释看程序啦。。SA没给我什么技术,但是规范的也学到5少。。
package com.sun.server;
/**
* @author Sun.zhong.
* @version 1.0
*/
import java.net.*;
import java.util.ArrayList;
import java.io.*;
/**
* @param client :socket object.
* @param ArrayList : list for all the socket connetions.
*
*/
public class Server2 extends Thread {
private Socket client;
private ArrayList list;
public Server2(Socket c,ArrayList list) {
this.list = list;
this.client = c;
}
/**
* override the methord run().
*
*/
public void run() {
try {
BufferedReader in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
while (true) {
String data = in.readLine();
/**
* update the information pool here.
* InformationManager.setData(data);
*/
/**
* list all the socket and send the message to the client .
*/
for(int i =0;i<list.size();i++){
Socket socket = (Socket)list.get(i);
if(socket != this.client){
/**
* broadcast the message from the information pool.
* PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(InformationManager.getData());
*/
//broadcast the message from the client..
PrintWriter out = new PrintWriter(socket.getOutputStream());
out.println(data);
out.flush();
}
}
if (data.equals("end"))
break;
}
client.close();
} catch (IOException ex) {
} finally {
}
}
/**
* entrance to the app.
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(1000);
ArrayList list = new ArrayList();
int i = 0;
while (true) {
// transfer location change Single User or Multi User
Socket socket = server.accept();
i++;
list.add(socket);
System.out.println("第 "+i+" 个client 建立连接");
Server2 mu = new Server2(socket,list);
mu.start();
}
}
}
**
**
2. 服务器端就是甘啦。。。宜家到客户端:
客户端相对简单,只要将信息的读取同信息的发送分开线程来做就不会导致阻塞啦。。。
**
package com.sun.client;
/**
* @author Sun.zhong
* @version 1.0
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*
* @param server:Socket object.
*
*/
public class Clients {
static Socket server;
/**
* entrance to the client.
* @param args
* @throws UnknownHostException
* @throws IOException
*/
public static void main(String args[]) throws UnknownHostException, IOException{
server=new Socket(InetAddress.getLocalHost(),1000);
**
BufferedReader br=new BufferedReader(new InputStreamReader(server.getInputStream()));
/**
* start the get data thread.
*/
Clients c = new Clients();
GetDataThread gdt = c.new GetDataThread(br);
gdt.start();
/**
* read data from server.
*/
PrintWriter out=new PrintWriter(server.getOutputStream());
BufferedReader wt=new BufferedReader(new InputStreamReader(System.in));
while(true){
String str=wt.readLine();
out.println(str);
out.flush();
if(str.equals("end")){
break;
}
}
}
class GetDataThread extends Thread{
private BufferedReader br;
public GetDataThread(BufferedReader br){
this.br = br;
}
public void run(){
try {
while(true){
System.out.println(br.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
**
记录:
hihi
hello
在搞毛
没搞毛
顶
顶毛
哈哈
哈毛
顶你个肺
顶你个肺
顶你个肺
**
打完,收工!。