java网络编程(二)多线程网络编程
来源:互联网 发布:建筑网络 编辑:程序博客网 时间:2024/04/28 05:25
通过上面第一章的程序可以看出来,针对服务端只能连接一个客户端,如果有另外一台机器连接主机就会出现错误,连接不上,主要是因为第一章的代码是单线程的,也就是是单对单的服务,服务端server接收到一个client请求后,后面的client请求就无法连接上主机了
下面是多线程的网络通信服务端代码:
package com.sun.net;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class ManyThreadSocketServer { private int port = 10000; private ServerSocket server; public ManyThreadSocketServer() throws IOException{ server = new ServerSocket( port); } public void talk() throws IOException{ while( true){ Socket socket = server.accept(); invoke(socket); } } public void invoke(final Socket socket){ new Thread( new Runnable() { @Override public void run() { try { BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); String msg = null; while( true){ msg = br.readLine(); System. err.println(msg); pw.println( "server:" + msg); pw.flush(); if(msg.equals( "bye")){ break; } }// socket.close();// if( br != null){// br.close();// }// if( pw != null){// pw.close();// } } catch (Exception e) { e.printStackTrace(); } } }).start(); } public BufferedReader getReader(Socket socket) throws Exception{ return new BufferedReader( new InputStreamReader(socket.getInputStream())); } public PrintWriter getWriter(Socket socket) throws Exception{ return new PrintWriter(socket.getOutputStream()); } public static void main(String[] args) throws Exception { new ManyThreadSocketServer().talk(); }}
客户端代:通过获取系统输入向服务端发送数据信息
package com.sun.net;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class ManyThreadSocketClient {
private String serverIp;
private int port;
private Socket socket ;
public ManyThreadSocketClient() {
serverIp = "192.168.1.103";
port = 10000;
}
public BufferedReader getReader( Socket socket) throws Exception{
return new BufferedReader( new InputStreamReader(System.in));
}
public PrintWriter getWriter( Socket socket) throws Exception{
return new PrintWriter(socket.getOutputStream());
}
public void speak(){
try {
socket = new Socket(serverIp,port);
BufferedReader br = getReader( socket);
PrintWriter pw = getWriter( socket);
String msg = null;
while( true){
msg = br.readLine();
pw.println(msg);
pw.flush();
if(msg.equals( "bye")){
break;
}
}
socket.close();
if(br != null){
br.close();
}
if(pw != null){
pw.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new ManyThreadSocketClient().speak();
}
}
0 0
- java网络编程(二)多线程网络编程
- java网络编程、多线程
- java 多线程网络编程
- Java 网络编程(二)
- Java网络编程(二)
- java网络编程(二)
- java网络编程二
- java网络编程二
- Java网络编程(二)
- java网络编程(二)
- 【网络编程4】Java多线程
- Java网络编程:多线程聊天
- Java网络编程+多线程通信
- Java多线程与网络编程
- 网络编程(二)
- 网络编程(二)
- 网络编程(二)
- 网络编程(二)
- Java中通过socket来传输文件
- 数据库 新增列...........................
- 二级路由如何设置
- sql 类型溢出,简化日期类型查询
- js中json的解析与组装
- java网络编程(二)多线程网络编程
- Chapter 5. std::vector in C++
- php下运用system命令时,重定向问题
- c++小例子
- 使用gradle和eclipse创建java web项目
- spring mybatis整合
- The C Library Reference Guide
- iOS开发长文--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
- php var_dump打印不全