Socket多线程编程 serversocket服务器多线程编程

Socket多线程编程 serversocket服务器多线程编程

服务器代码

package com.lotus.server;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

public class SocketServer {
List<Socket> list;
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
SocketServer socketServer=new SocketServer();
socketServer.startServer();
if(Thread.activeCount()>1){
Thread.yield();
}


}



public void startServer(){
ServerSocket serverSocket=null;
try {
list=new ArrayList<Socket>();
serverSocket=new ServerSocket(9898);
new MeldSocket(serverSocket).start();

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

class MeldSocket extends Thread{
private ServerSocket serverSocket;
public MeldSocket(ServerSocket serverSocket){
this.serverSocket=serverSocket;
}

@Override
public void run() {
// TODO Auto-generated method stub
Socket socket;
while(true){

try {
socket = serverSocket.accept();
new ReaderThread(socket).start();
new WriterThread(socket).start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

class WriterThread extends Thread{
private Socket socket=null;
// BufferedReader inputReader=null;
BufferedWriter writer=null;
public WriterThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub

try {
System.out.println("开始输入");
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// inputReader=new BufferedReader(new InputStreamReader(System.in));
new Timer().schedule(new TimerTask() {

@Override
public void run() {
// TODO Auto-generated method stub
try {
writer.write("老子在做测试\n");
writer.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 1000, 10000);
// String inputContent;
// while((inputContent=inputReader.readLine())!="byte"){
// System.out.println(inputContent);
//
// }

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ReaderThread extends Thread{
private Socket socket=null;
BufferedInputStream reader=null;
public ReaderThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub

try {

reader=new BufferedInputStream(socket.getInputStream());
System.out.println("接收到输入的信息");

int len=0;
byte[] bty=new byte[1024];
while ((len = reader.read(bty)) != -1) {
String inputContent=new String(bty,0,len);
System.out.println(inputContent);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

 

客户端代码

package com.lotus.pushlangconnect;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;

import javax.sound.sampled.AudioFormat.Encoding;

public class SocketClient {

public SocketClient() {

}
public static void main(String[] args) throws IOException {
SocketClient client=new SocketClient();
client.start();
}

public void start() throws IOException{
Socket socket=null;
try {
socket=new Socket("localhost", 9898);
new ReaderThread(socket).start();
new WriterThread(socket).start();

 

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}
class WriterThread extends Thread{
private Socket socket=null;
BufferedReader inputReader=null;
BufferedWriter writer=null;
public WriterThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub

try {
System.out.println("开始输入");
writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
inputReader=new BufferedReader(new InputStreamReader(System.in));
String inputContent;
while((inputContent=inputReader.readLine())!="byte"){
// System.out.println(inputContent);
writer.write(inputContent);
writer.flush();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
writer.close();
inputReader.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

class ReaderThread extends Thread{
private Socket socket=null;
BufferedReader reader=null;
public ReaderThread(Socket socket){
this.socket=socket;
}
@Override
public void run() {
// TODO Auto-generated method stub

try {

reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));

String respsonseContent;
while((respsonseContent=reader.readLine())!=null){
System.out.println(respsonseContent);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
reader.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}

转载于:https://www.cnblogs.com/lotus-emperor/p/4761386.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值