java socket转发_Java Socket 网络编程 之 信息转发

//DateServer.java文件

import java.net.*;

import java.util.Date;

import java.util.*;

import java.io.*;

class Operator extends Thread {

DateServer server;

Socket sr;

OutputStream out;

PrintStream ps;

Listclients;

public Operator(DateServer _server,Socket s,Listclients ) {

this.clients=clients;

server = _server;

this.sr = s;

}

public Operator() {

}

public void run() {

try {

InputStream in = sr.getInputStream();

BufferedReader bin = new BufferedReader(new InputStreamReader(in));

String data = bin.readLine();

while (data != null) {

//将接收的信息转发出去

//打印接收的信息

System.out.println(data);

//继续读取接收

for(int j=0; j{

Socket c1 = clients.get(j);

out = c1.getOutputStream();

ps = new PrintStream(out,true);

if(!c1.equals(sr))ps.println(">>"+clients.size()+ ":"+ data);

System.out.println("From Client: "+" " + data);

}

data = bin.readLine();

}//end of while

bin.close();

ps.close();

sr.close();

} catch (Exception e) {

e.printStackTrace();

} finally {

server.delCount();

}

}//end of run

}// end of class Operator

public class DateServer {

ServerSocket ss;

final int MAX_COUNT = 10;

int connectCount = 0;

List clients = new ArrayList();

public synchronized void addCount() {

connectCount++;

System.out.println("After addCount, connectCount=" + connectCount);

}

public synchronized void delCount() {

connectCount--;

System.out.println("After delCount, connectCount=" + connectCount);

}

public synchronized boolean isCountExceed() {

if (connectCount > MAX_COUNT)

return true;

else

return false;

}

public static void main(String args[]) {

new DateServer().go();

}

public void go() {

// Register your service on port 5678

try {

ss = new ServerSocket(5678);

} catch (IOException e) {        }

// Run the listen/accept loop forever

while (true) {

try {

while (isCountExceed()) {

try {

Thread.sleep(5000);

} catch (Exception e) {

}

}

// Wait here and listen for a connection

Socket s= ss.accept();

clients.add(s);

System.out.println("accept one client");

addCount();

Operator ms = new Operator(this,s,clients);

ms.start();

} catch (Exception e) {

e.printStackTrace();

}

} //end of while loop

} //end of method go()

} //end of class DateServer

//DateClient.java文件

import java.net.*;

import java.util.Date;

import java.io.*;

public class DateClient extends Thread{

//PrintStream OutputS;

Socket s1;

public static void main(String args[]){

PrintStream ps1;

DataInputStream KeyInput = new DataInputStream(System.in);

String sdata;

DateClient dc = new DateClient();

try {

dc.s1 = new Socket("127.0.0.1",5678);

} catch (UnknownHostException e1) {

e1.printStackTrace();

} catch (IOException e1) {

e1.printStackTrace();

}

dc.setName(args[0]);

dc.start();

while(true)

{

try {

OutputStream out1 = dc.s1.getOutputStream();

ps1 = new PrintStream(out1,true);

sdata= KeyInput.readLine(); //以行形式读入

System.out.println(""+sdata);

ps1.println(args[0]+ ":"+sdata);

}

catch (IOException e){

return;

}

}

}

public void run() {

OutputStream out;

PrintStream ps;

try{

out = s1.getOutputStream();

ps = new PrintStream(out,true);

ps.println(getName()+ ":"+ new Date().toString()+" Connected");

System.out.println("send:"+getName()+ ":"+ new Date().toString());

//接收服务器转发来的消息

InputStream in = s1.getInputStream();

BufferedReader bin = new BufferedReader(new InputStreamReader(in));

String data = bin.readLine();

while(data != null){

System.out.println(data);

data = bin.readLine();

}

}catch(Exception e){

e.printStackTrace();

}

} //end of method go()

} //end of class DateClient()

--------------------next---------------------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值