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();
}
}
}
}
}

时间: 2024-08-26 11:44:58

Socket多线程编程 serversocket服务器多线程编程的相关文章

Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理

[本文谢绝转载原文来自http://990487026.blog.51cto.com] <纲要> Linux统系统开发11 Socket API编程2 多进程 多线程 高并发处理 UDP服务器 客户端最小模型,处理字符转大写 TCP 多进程并发服务器模型,为每个客户端开启一个进程: TCP 多线程服务器模型,使用wrap函数封装 作业: ---------------------------------------------------- UDP服务器 客户端最小模型,处理字符转大写 [em

socket编程,简单多线程服务端测试程序

socket编程,简单多线程服务端测试程序 前些天重温了MSDN关于socket编程的WSAStartup.WSACleanup.socket.closesocket.bind.listen.accept.recv.send等函数的介绍,今天写了一个CUI界面的测试程序(依赖MFC)作为补充.程序功能简介如下: 1:一个线程做监听用. 2:监听线程收到客户端连接后,创建新线程接收客户端数据.所有对客户端线程将加入容器,以便管理. 3:服务端打印所有客户端发来的信息. 4:服务端CUI界面输入数字

linux网络编程-----&gt;高并发---&gt;多线程并发服务器

做网络服务的时候并发服务端程序的编写必不可少.前端客户端应用程序是否稳定一部分取决于客户端自身,而更多的取决于服务器是否相应时间够迅速,够稳定. 常见的linux并发服务器模型: 多进程并发服务器 多线程并发服务器 select多路I/O转接服务器 poll多路I/O转接服务器 epool多路I/O转接服务器. 本次主要讨论多线程并发服务器模型: 使用多线程模型开发服务时需要考虑以下问题 1.  调整进程内最大文件描述符上限. 2.  线程如有共享数据, 考虑线程同步. 3.  服务于客户端线程

编程思想之多线程与多进程(2)——Java中的多线程

原文:http://blog.csdn.net/luoweifu/article/details/46673975 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java中多线程程序的开发 单线程 任何程序至少有一个线程,即使你没有主动地创建线程,程序从一开始执行就有一个默认的线程,被称为主线程,只有一个线程的程序称为单线程程序.如下面

【转】编程思想之多线程与多进程(3)——Java中的多线程

<编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下Java中多线程程序的开发 单线程 任何程序至少有一个线程,即使你没有主动地创建线程,程序从一开始执行就有一个默认的线程,被称为主线程,只有一个线程的程序称为单线程程序.如下面这一简单的代码,没有显示地创建一个线程,程序从main开始执行,main本身就是一个线程(主线程),单个线程从头执行到尾. [Demo1]:单线程程序 pu

Python并发编程系列之多线程

1引言 2 创建线程 2.1 函数的方式创建线程 2.2 类的方式创建线程 3 Thread类的常用属性和方法 3.1 守护线程:Deamon 3.2 join()方法 4 线程间的同步机制 4.1 互斥锁:Lock 4.2 递归锁:RLock 4.3 Condition 4.4 信号量:Semaphore 4.5 事件:Event 4.6 定时器:Timer 5 线程间的通行 5.1队列:Queue 6 线程池 7 总结 1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说

编程思想之多线程与多进程(2)——线程优先级与线程安全

原文:http://blog.csdn.net/luoweifu/article/details/46701167 作者:luoweifu 转载请标名出处 <编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础.本文将接着讲一下线程优先级和线程安全. 线程优先级 现在主流操作系统(如Windows.Linux.Mac OS X)的任务调度除了具有前面提到的时间片轮转的特点外,还有优先级调度(Prior

C#网络编程系列文章(五)之Socket实现异步UDP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 本文介绍 在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现.System.Net 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient.TCPListener 和 UDPCl

编程思想之多线程与多进程(4)——C++中的多线程

<编程思想之多线程与多进程(1)--以操作系统的角度述说线程与进程>一文详细讲述了线程.进程的关系及在操作系统中的表现,<编程思想之多线程与多进程(2)--线程优先级与线程安全>一文讲了线程安全(各种同步锁)和优先级,这是多线程学习必须了解的基础.本文将接着讲一下C++中多线程程序的开发.这里主要讲Windows平台线程的用法,创建线程要调用windows API的CreateThread方法. 创建线程 在Windows平台,Windows API提供了对多线程的支持.前面进程和