最近,自己仿照网上写了个多客户端,网络通信(socket)用例:
1. Server2.java--服务端
2. Client2.java--客户端
3. Main2.java--启动测试
现在基本运行起来了,就是使用 inputstream时,使用BufferedInputStream bis 。。总是阻塞程序继续运行。。。
package com.automic.hxb.socketTest.test2;
import java.io.*;
import java.net.*;
public class Server2 extends Thread {
private int port = 5678;
private ServerSocket server;
private int onLine = 0;// connect client numbers
/**
* dispatcher start work
*/
public void startWork() {
this.start();
}
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
try {// get server socket
server = new ServerSocket(port);
while (true) {
this.getConn();
System.out.println("Server2 -44- onLine = " + onLine);
try {
sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
;
}
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} finally {
try{
if(server != null){
server.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{;}
}
}
/**
* connect client socket
*/
private void getConn() {
try {
System.out.println("server start work.....");
Socket client = server.accept();
System.out.println("client port : " + client.getPort());
ClientThread ct = new ClientThread(client);
onLine++;
ct.start();
} catch (Exception e) {
e.printStackTrace();
} finally {
;
}
}
/**
* handle per client`s connection
*
* @author hxb
*
*/
public class ClientThread extends Thread {
private Socket client;
private BufferedReader in;
private PrintWriter out;
public ClientThread(Socket client) {
this.client = client;
}
/*
* (non-Javadoc)
*
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
try {
/** * read message from client********/
String str = this.read();
/** *write message to client *********/
this.send(str);
} catch (Exception e) {
e.printStackTrace();
} finally {
/** *close object********************/
this.closeObjs();
}
}
/**
* read message from client connection
*
* @return
*/
private String read() {
try {
in = new BufferedReader(new InputStreamReader(client
.getInputStream()));
StringBuffer sb = new StringBuffer();
String str = in.readLine();
sb.append(str);
System.out.println("Server2 -69- 客户端输入:" + sb.toString());
return sb.toString();
} catch (Exception e) {
e.printStackTrace();
} finally {
;
}
return null;
}
/**
* write message to client connection
*
* @param bakMess
*/
private void send(String bakMess) {
try {
out = new PrintWriter(client.getOutputStream());
bakMess = "服务器端已收到!\n mess:" + bakMess;
out.println(bakMess);
out.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
;
}
}
/**
* close all object
*/
private void closeObjs() {
try {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
if (client != null) {
client.close();
onLine--;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
;
}
}
}
}
package com.automic.hxb.socketTest.test2;
import java.io.*;
import java.net.*;
public class Client2 extends Thread{
private String ip = "192.168.0.131";
private int port = 5678;
private Socket server;
private BufferedReader in;
private PrintWriter out;
private int clientNum = 10;
public void startWork(){
this.start();
}
/* (non-Javadoc)
* @see java.lang.Thread#run()
*/
@Override
public void run() {
// TODO Auto-generated method stub
int i = 1;
while(i < clientNum){
this.connServer(i);
i++;
try {
sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void connServer(int i){
try {
System.out.println("client -" + i + "- start work....");
server = new Socket(ip, port);
/***send mess to server******/
String str = "服务器你好,I am client -" + i + "- ..... helllllllll";
this.send("client -" + i + "- say:" + str);
/***read bakMess from server*********/
this.read();
/***close object ******/
this.closeObjs();
} catch (Exception e) {
e.printStackTrace();
} finally {
;
}
}
/**
* send message to server
* @param sender
*/
private void send(String sender){
try{
PrintWriter out = new PrintWriter(server.getOutputStream());
out.println(sender);
out.flush();
}catch(Exception e){
e.printStackTrace();
}finally{;}
}
/**
* read back message from server
*/
private void read(){
try{
BufferedReader in = new BufferedReader(new InputStreamReader(server
.getInputStream()));
StringBuffer sb = new StringBuffer();
String rl = in.readLine();
while (rl != null) {
sb.append(rl);
rl = in.readLine();
}
System.out.println("Client2 -30-" + sb.toString());
}catch(Exception e){
e.printStackTrace();
}finally{;}
}
/**
* close all objets
*/
private void closeObjs(){
try{
if(out != null){
out.close();
}
if(in != null){
in.close();
}
if(server != null){
server.close();
}
}catch(Exception e){
e.printStackTrace();
}finally{;}
}
}
/**
*
*/
package com.automic.hxb.socketTest.test2;
/**
* @author hxb
*
*/
public class Main2 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Server2 s2 = new Server2();
s2.startWork();
Client2 c2 = new Client2();
c2.startWork();
}
}
分享到:
相关推荐
Java Socket网络编程是Java开发中一个重要...Java Socket编程是构建网络应用的基础,掌握其原理和实践方法对于开发分布式系统、网络服务等至关重要。通过不断实践和学习,开发者可以更熟练地运用Socket来解决实际问题。
在Java中,我们可以使用`java.net.Socket`类和`java.net.ServerSocket`类来实现TCP Socket编程。`ServerSocket`用于监听客户端的连接请求,`Socket`则代表一个客户端连接。以下是一个简单的TCP服务器端和客户端示例...
Java的Socket编程接口提供了丰富的功能,包括错误处理、套接字选项设置等,使得开发者能够构建复杂、可靠的网络应用。同时,Java的异常处理机制也为网络编程提供了良好的健壮性。在实际开发中,还需要考虑线程管理、...
Java Socket编程还涉及许多其他关键概念,例如异常处理、线程同步、数据编码解码、超时设置等。在实际应用中,通常需要考虑以下几点: - **异常处理**:在上述示例中,每个可能抛出异常的操作都被捕获并处理,确保...
Socket编程提供了在不同网络节点间进行数据传输的基础,它是基于TCP/IP协议族的,确保了数据的可靠传输。 首先,我们来理解Socket的基本概念。Socket在计算机网络中可以看作是两个应用程序之间建立通信的端点,它...
首先,我们来深入理解Java Socket编程。Socket是网络通信中的端点,它允许两台计算机(或者网络上的任何其他设备)通过TCP/IP协议进行通信。在Java中,`java.net.Socket`和`java.net.ServerSocket`类是实现Socket...
在Java中,Socket编程是实现网络通信的基本手段,它允许应用程序之间通过网络进行数据交换。本文将详细探讨Java Socket网络编程中的关键知识点。 首先,我们回顾一下网络通信的发展历史。通信技术的发展经历了从...
Java Socket网络编程是Java平台中实现网络通信的基础组件,它提供了低级别的、面向连接的、可靠的字节流通信。在本教程中,我们将探讨如何利用Java Socket构建一个多客户端与单服务器的聊天应用,同时实现客户端之间...
在Socket编程中,必须妥善处理各种网络异常,如`IOException`,确保程序的健壮性。例如,当网络中断或服务器关闭时,需要捕获并适当地处理异常。 7. **阻塞与非阻塞模式** 默认情况下,Socket和ServerSocket操作...
Java Socket网络编程是Java语言中实现网络通信的基础,它提供了低级别的、面向连接的、可靠的字节流服务。在这个基于Java Socket实现的简单模拟QQ聊天程序中,我们主要探讨以下几个核心知识点: 1. **Socket原理**...
Java Socket网络编程是Java开发中实现网络通信的基础,它提供了客户端和服务器端进行数据交换的接口。在Java SDK中,`java.net`包包含了Socket相关的API,使得开发者能够轻松地进行网络编程。 首先,要理解网络编程...
在Java Socket编程中,重要的是理解I/O流的概念,因为数据是以字节流的形式在网络中传输的。同时,为了提高服务器的并发能力,通常会为每个客户端连接创建新的线程或使用线程池来处理请求。在实际项目中,还需要考虑...
在Java Socket编程中,常用的设计模式是客户端/服务器(C/S)结构。服务器端创建ServerSocket,监听特定端口,当客户端通过Socket发起连接请求时,服务器响应并创建新的Socket进行通信。在多线程环境下,服务器可以...
Socket编程是Java网络编程的核心内容之一,其应用范围广泛,包括但不限于即时通讯、文件传输、网络游戏等多个领域。通过本文的学习,开发者可以掌握基于Java Socket的网络编程基础,并将其应用于实际开发项目中。...
在这个五子棋游戏中,Socket编程被用来连接多个玩家,使得他们可以在线对战。 首先,我们要理解Java Socket的基本概念。Socket是网络通信中的一个端点,它允许两个应用通过网络进行数据交换。一个Socket由IP地址和...
Java Socket网络编程是Java开发中的重要组成部分,它允许应用程序通过网络进行通信,实现客户端与服务器之间的数据交换。在本文中,我们将深入探讨Java Socket的基本概念、工作原理以及如何使用Socket进行实际的网络...
在进行Socket编程时,需要处理IOException,因为网络通信过程中可能出现各种错误,如连接超时、网络中断等。合理的异常处理可以确保程序的健壮性。 五、多线程与Socket 在实际应用中,服务器通常需要同时处理多个...
这个实例展示了Java Socket编程的基本流程,包括服务器端的监听、连接、数据交换,以及客户端的连接、发送数据和接收响应。这种模式广泛应用于各种网络应用,如聊天室、文件传输、远程控制等。通过理解这个实例,...
读书笔记:C++&&Java socket网络编程 学习socket 案例快速入手