java socket多线程
来源:互联网 发布:《从零开始学python》 编辑:程序博客网 时间:2024/06/10 19:04
转载:http://www.cnblogs.com/cocohxq/archive/2012/09/28/2707104.html
使用时注意流的使用,如果都使用缓冲流可能会造成接受不到数据的情况
服务器端代码:
1 package internetCommunication; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.ServerSocket; 8 import java.net.Socket; 9 10 public class Server {11 12 public static void main(String[] args) {13 try {14 ServerSocket server = new ServerSocket(8888);15 Socket client = server.accept();16 BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));17 PrintWriter out=new PrintWriter(client.getOutputStream());18 BufferedReader userin = new BufferedReader(new InputStreamReader(System.in));19 20 21 new ReceiveTread(server,in,out,userin,client).start();22 new SendThread(out, userin,true).start();23 } catch (IOException e) {24 e.printStackTrace();25 }26 27 28 }29 30 }
客户端代码
1 package internetCommunication; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.InputStreamReader; 6 import java.io.PrintWriter; 7 import java.net.InetAddress; 8 import java.net.Socket; 9 10 public class Client {11 12 13 public static void main(String[] args) {14 try {15 Socket server = new Socket(InetAddress.getLocalHost(), 8888);16 BufferedReader in = new BufferedReader(new InputStreamReader(server.getInputStream()));17 PrintWriter out=new PrintWriter(server.getOutputStream());18 BufferedReader userin = new BufferedReader(new InputStreamReader(System.in));19 20 new SendThread(out,userin,false).start();21 new ReceiveTread(server,in,out,userin).start();22 23 24 } catch (IOException e) {25 e.printStackTrace();26 }27 28 29 }30 }
发消息多线程类
1 package internetCommunication; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 import java.text.SimpleDateFormat; 7 import java.util.Date; 8 9 public class SendThread extends Thread{10 11 PrintWriter out;12 BufferedReader userin;13 boolean isServer;14 15 public SendThread(PrintWriter out,BufferedReader userin,boolean isServer) {16 this.out = out;17 this.userin = userin;18 this.isServer = isServer;19 }20 21 @Override22 public void run() {23 SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");24 25 try {26 while(true){27 if(isServer){28 out.println("Server "+sf.format(new Date())+"\n\t"+ userin.readLine());29 }else{30 out.println("client "+sf.format(new Date())+"\n\t"+ userin.readLine());31 }32 out.flush();33 }34 } catch (IOException e) {35 e.printStackTrace();36 }37 38 }39 40 41 42 43 44 45 }
接消息多线程类
1 package internetCommunication; 2 3 import java.io.BufferedReader; 4 import java.io.IOException; 5 import java.io.PrintWriter; 6 import java.net.ServerSocket; 7 import java.net.Socket; 8 9 public class ReceiveTread extends Thread{10 BufferedReader in ;11 ServerSocket server;12 PrintWriter out;13 BufferedReader userin;14 Socket client;15 16 17 public ReceiveTread(ServerSocket server,BufferedReader in,PrintWriter out,BufferedReader userin,Socket client) {18 this.in = in;19 this.server = server;20 this.client = client;21 this.out = out;22 this.userin = userin;23 }24 25 public ReceiveTread(Socket client ,BufferedReader in,PrintWriter out,BufferedReader userin) {26 this.in = in;27 this.client = client;28 this.out = out;29 this.userin = userin;30 }31 32 33 @Override34 public void run() {35 try {36 while(true){37 String info = in.readLine();38 while(info !=null){39 System.out.println(info);40 info = in.readLine();41 }42 if(in.readLine().equals("end")){43 break;44 }45 }46 in.close();47 out.close();48 userin.close();49 if(client != null){50 client.close();51 }52 server.close();53 } catch (IOException e) {54 e.printStackTrace();55 }56 }57 }
以下是控制输出:
这是客户端的
这是服务器的:
这里要注意的是: 1、启动时要先启动服务器,在启动客户端,因为只有服务器启动了,开始监听某个端口,客户端才能连上
2、因为输入控制台和输出控制台都揉在一起显示,控制台显示接收消息的时候,光标还是会停留在上一次输入的地方,如果输入非汉字类的,光标会自动跳下来
但是输入汉字,会出现把接收到消息也发送的情况,所以需要输入的时候将光标自己点下来,如果是GUI编程的话,就没有这个问题,因为输入的面板和显示面板是独立开来的,呵呵
0 0
- java socket多线程代码
- java多线程Socket例子
- java socket多线程聊天室
- Flex+Java Socket多线程
- Flex+Java Socket多线程
- Java多线程Socket资料
- Java Socket多线程
- java socket多线程聊天室
- java socket 多线程
- JAVA : Socket和多线程
- java socket 多线程
- java socket多线程编程
- Java socket多线程
- Java socket多线程示例
- java socket多线程通讯
- java socket多线程
- java socket多线程编程
- JAVA多线程Socket实现
- 2017.05.11回顾
- Android Error Gradle sync failed 设备未就绪问题
- Matlab中libsvm工具包的安装
- PHP制作数字字母混合验证码、图片验证码、中文验证码
- RichEditCtrl 控件-MyRichEditCtrl
- java socket多线程
- Python·Jupyter Notebook各种使用方法记录·持续更新
- 构建Web应用详解
- mysql 数据库导入导出
- 设计模式--单例模式
- Oracle 11G RAC教程之集群安装(七)
- C# MemoryStream类
- linux utf-8及gbk编码环境安装配置强大的vim
- elasticsearch5 在windows下head插件的安装