socket ( java ) 简单多个客户端、服务端通信(多线程)
2012-08-23 09:57
661 查看
原创作品,允许转载,转载时请务必以超链接形式标明文章
原始出处 、作者信息和本声明。否则将追究法律责任。
http://blog.csdn.net/love254443233/article/details/7897269
实现:
客户端:多个socket(多个端口),其中一个客户端的一个端口用于接收服务端发送过来的消息,其一个用于向服务端发送消息。其它客户端只有发消息的功能。
服务端:两个socket,一个用于循环接收客户端发送过来的socket请求。一个用于接收消息手自动向客户端发送消息。
注:先运行MySocketServer,然后MySocketClient,最后SocketClient;MySocketClient、SocketClient向MySocketServer发送消息。
1、MySocketServer类:
Java代码
package socket._5;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
private static int localHostPort = 5000;
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(localHostPort);
System.out.println("服务器端------监听中.....");
while (true) {
Socket socket = s.accept();
System.out.println("接入的socket:" + socket);
GetMessage getMessage = new GetMessage(socket);
Thread thread = new Thread(getMessage);
thread.start();
}
}
}
// 接收消息
class GetMessage implements Runnable {
private int remotePort = 5001;
private String remoetAddress = "localhost";
private InputStream inputStream;
private OutputStream outputStream;
private Socket socketGet;
private Socket socketSendMessage;
private boolean socketIsExits = false;
private int sum = 0;
private byte[] buffer;
public GetMessage(Socket socket) {
this.socketGet = socket;
try {
inputStream = socketGet.getInputStream();
outputStream = socketGet.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String str = "";
int n = 0;
while (true) {
try {
buffer = new byte[2048];
n = inputStream.read(buffer);
str = new String(buffer, 0, n);
System.out.print("客户端:" + str);
sendMessage();
} catch (IOException e) {
e.printStackTrace();
break;
}
if (str.equals("q")) {
break;
}
}
try {
if (socketGet != null)
socketGet.close();
if (inputStream != null)
inputStream.close();
} catch (Exception e) {
}
}
// 发送消息
public void sendMessage() throws IOException {
if (socketIsExits) {
try {
String input = "======" + (sum++);
System.out.println("服务端发送 socket:" + this.socketSendMessage);
outputStream.write(input.getBytes());
System.out.println("服务器:" + input);
outputStream.flush();
} catch (Exception e) {
System.out.println("客户端socket不存在。");
checkSocket();
}
} else {
checkSocket();
}
}
private void checkSocket() {
try {
socketSendMessage = new Socket(remoetAddress, remotePort);
outputStream = socketSendMessage.getOutputStream();
socketIsExits = true;
} catch (Exception e) {
socketIsExits = false;
}
}
}
Java代码
package socket._5;
import java.io.*;
import java.net.*;
public class MySocketClient {
private static int localHostPort = 5001;
public static void main(String[] args) throws IOException {
CSendMessage cSendMessage = new CSendMessage();
Thread thread2 = new Thread(cSendMessage);
thread2.start();
ServerSocket serverSocket = new ServerSocket(localHostPort);
while (true) {
Socket socketServer = serverSocket.accept();
CGetMessage getMessage = new CGetMessage(socketServer);
Thread thread = new Thread(getMessage);
thread.start();
}
}
}
// 接收消息
class CGetMessage implements Runnable {
private InputStream inputStream;
private Socket socket;
private byte[] buffer;
public CGetMessage(Socket socket) {
this.socket = socket;
try {
inputStream = socket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String str = "";
while (true) {
buffer = new byte[2048];
int n = 0;
try {
n = inputStream.read(buffer);
str = new String(buffer, 0, n);
System.out.println("服务器:" + str);
} catch (IOException e) {
e.printStackTrace();
break;
}
if (str.equals("q")) {
break;
}
}
try {
if (socket != null)
socket.close();
if (inputStream != null)
inputStream.close();
} catch (Exception e) {
}
}
}
// 发送消息
class CSendMessage implements Runnable {
private boolean socketIsExits = false;
private OutputStream outputStream;
private Socket socketClient;
private int remotePort = 5000;
private String remoteAddress = "localhost";
private byte[] buffer;
public CSendMessage() throws IOException {
}
public void run() {
String str = new String();
checkSocket();
int size = 0;
while (true) {
try {
System.out.println("请输入:");
buffer = new byte[2048];
size = System.in.read(buffer);
str = new String(buffer, 0, size);
} catch (IOException e) {
e.printStackTrace();
}
if (socketIsExits) {
try {
System.out.println("客户端发送 socket:" + this.socketClient);
System.out.print("客户端:" + str);
outputStream.write(str.getBytes());
outputStream.flush();
} catch (Exception e) {
System.out.println("客户端socket不存在。");
checkSocket();
}
} else {
checkSocket();
}
}
}
private void checkSocket() {
try {
socketClient = new Socket(remoteAddress, remotePort);
outputStream = socketClient.getOutputStream();
socketIsExits = true;
} catch (Exception e) {
socketIsExits = false;
}
}
}
Java代码
package socket._5;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient implements Runnable {
public int remotePort = 5000;
public String remoteAddress = "localhost";
public static void main(String args[]) {
SocketClient socketClient = new SocketClient();
socketClient.run();
}
public SocketClient() {
}
public void run() {
Socket socket = null;
OutputStream outputStream = null;
byte[] buffer;
int size = 0;
try {
socket = new Socket(remoteAddress, remotePort);
outputStream = socket.getOutputStream();
System.out.println(socket);
while (true) {
System.out.println("input:");
buffer = new byte[2048];
size = System.in.read(buffer);
if (size > 0) {
outputStream.write(new String(buffer, 0, size).getBytes());
outputStream.flush();
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
if (outputStream != null)
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
java教程下载
原始出处 、作者信息和本声明。否则将追究法律责任。
http://blog.csdn.net/love254443233/article/details/7897269
实现:
客户端:多个socket(多个端口),其中一个客户端的一个端口用于接收服务端发送过来的消息,其一个用于向服务端发送消息。其它客户端只有发消息的功能。
服务端:两个socket,一个用于循环接收客户端发送过来的socket请求。一个用于接收消息手自动向客户端发送消息。
注:先运行MySocketServer,然后MySocketClient,最后SocketClient;MySocketClient、SocketClient向MySocketServer发送消息。
1、MySocketServer类:
Java代码
package socket._5;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class MySocketServer {
private static int localHostPort = 5000;
public static void main(String[] args) throws IOException {
ServerSocket s = new ServerSocket(localHostPort);
System.out.println("服务器端------监听中.....");
while (true) {
Socket socket = s.accept();
System.out.println("接入的socket:" + socket);
GetMessage getMessage = new GetMessage(socket);
Thread thread = new Thread(getMessage);
thread.start();
}
}
}
// 接收消息
class GetMessage implements Runnable {
private int remotePort = 5001;
private String remoetAddress = "localhost";
private InputStream inputStream;
private OutputStream outputStream;
private Socket socketGet;
private Socket socketSendMessage;
private boolean socketIsExits = false;
private int sum = 0;
private byte[] buffer;
public GetMessage(Socket socket) {
this.socketGet = socket;
try {
inputStream = socketGet.getInputStream();
outputStream = socketGet.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String str = "";
int n = 0;
while (true) {
try {
buffer = new byte[2048];
n = inputStream.read(buffer);
str = new String(buffer, 0, n);
System.out.print("客户端:" + str);
sendMessage();
} catch (IOException e) {
e.printStackTrace();
break;
}
if (str.equals("q")) {
break;
}
}
try {
if (socketGet != null)
socketGet.close();
if (inputStream != null)
inputStream.close();
} catch (Exception e) {
}
}
// 发送消息
public void sendMessage() throws IOException {
if (socketIsExits) {
try {
String input = "======" + (sum++);
System.out.println("服务端发送 socket:" + this.socketSendMessage);
outputStream.write(input.getBytes());
System.out.println("服务器:" + input);
outputStream.flush();
} catch (Exception e) {
System.out.println("客户端socket不存在。");
checkSocket();
}
} else {
checkSocket();
}
}
private void checkSocket() {
try {
socketSendMessage = new Socket(remoetAddress, remotePort);
outputStream = socketSendMessage.getOutputStream();
socketIsExits = true;
} catch (Exception e) {
socketIsExits = false;
}
}
}
package socket._5; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class MySocketServer { private static int localHostPort = 5000; public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(localHostPort); System.out.println("服务器端------监听中....."); while (true) { Socket socket = s.accept(); System.out.println("接入的socket:" + socket); GetMessage getMessage = new GetMessage(socket); Thread thread = new Thread(getMessage); thread.start(); } } } // 接收消息 class GetMessage implements Runnable { private int remotePort = 5001; private String remoetAddress = "localhost"; private InputStream inputStream; private OutputStream outputStream; private Socket socketGet; private Socket socketSendMessage; private boolean socketIsExits = false; private int sum = 0; private byte[] buffer; public GetMessage(Socket socket) { this.socketGet = socket; try { inputStream = socketGet.getInputStream(); outputStream = socketGet.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } } public void run() { String str = ""; int n = 0; while (true) { try { buffer = new byte[2048]; n = inputStream.read(buffer); str = new String(buffer, 0, n); System.out.print("客户端:" + str); sendMessage(); } catch (IOException e) { e.printStackTrace(); break; } if (str.equals("q")) { break; } } try { if (socketGet != null) socketGet.close(); if (inputStream != null) inputStream.close(); } catch (Exception e) { } } // 发送消息 public void sendMessage() throws IOException { if (socketIsExits) { try { String input = "======" + (sum++); System.out.println("服务端发送 socket:" + this.socketSendMessage); outputStream.write(input.getBytes()); System.out.println("服务器:" + input); outputStream.flush(); } catch (Exception e) { System.out.println("客户端socket不存在。"); checkSocket(); } } else { checkSocket(); } } private void checkSocket() { try { socketSendMessage = new Socket(remoetAddress, remotePort); outputStream = socketSendMessage.getOutputStream(); socketIsExits = true; } catch (Exception e) { socketIsExits = false; } } }2、MySocketClient类:
Java代码
package socket._5;
import java.io.*;
import java.net.*;
public class MySocketClient {
private static int localHostPort = 5001;
public static void main(String[] args) throws IOException {
CSendMessage cSendMessage = new CSendMessage();
Thread thread2 = new Thread(cSendMessage);
thread2.start();
ServerSocket serverSocket = new ServerSocket(localHostPort);
while (true) {
Socket socketServer = serverSocket.accept();
CGetMessage getMessage = new CGetMessage(socketServer);
Thread thread = new Thread(getMessage);
thread.start();
}
}
}
// 接收消息
class CGetMessage implements Runnable {
private InputStream inputStream;
private Socket socket;
private byte[] buffer;
public CGetMessage(Socket socket) {
this.socket = socket;
try {
inputStream = socket.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
String str = "";
while (true) {
buffer = new byte[2048];
int n = 0;
try {
n = inputStream.read(buffer);
str = new String(buffer, 0, n);
System.out.println("服务器:" + str);
} catch (IOException e) {
e.printStackTrace();
break;
}
if (str.equals("q")) {
break;
}
}
try {
if (socket != null)
socket.close();
if (inputStream != null)
inputStream.close();
} catch (Exception e) {
}
}
}
// 发送消息
class CSendMessage implements Runnable {
private boolean socketIsExits = false;
private OutputStream outputStream;
private Socket socketClient;
private int remotePort = 5000;
private String remoteAddress = "localhost";
private byte[] buffer;
public CSendMessage() throws IOException {
}
public void run() {
String str = new String();
checkSocket();
int size = 0;
while (true) {
try {
System.out.println("请输入:");
buffer = new byte[2048];
size = System.in.read(buffer);
str = new String(buffer, 0, size);
} catch (IOException e) {
e.printStackTrace();
}
if (socketIsExits) {
try {
System.out.println("客户端发送 socket:" + this.socketClient);
System.out.print("客户端:" + str);
outputStream.write(str.getBytes());
outputStream.flush();
} catch (Exception e) {
System.out.println("客户端socket不存在。");
checkSocket();
}
} else {
checkSocket();
}
}
}
private void checkSocket() {
try {
socketClient = new Socket(remoteAddress, remotePort);
outputStream = socketClient.getOutputStream();
socketIsExits = true;
} catch (Exception e) {
socketIsExits = false;
}
}
}
package socket._5; import java.io.*; import java.net.*; public class MySocketClient { private static int localHostPort = 5001; public static void main(String[] args) throws IOException { CSendMessage cSendMessage = new CSendMessage(); Thread thread2 = new Thread(cSendMessage); thread2.start(); ServerSocket serverSocket = new ServerSocket(localHostPort); while (true) { Socket socketServer = serverSocket.accept(); CGetMessage getMessage = new CGetMessage(socketServer); Thread thread = new Thread(getMessage); thread.start(); } } } // 接收消息 class CGetMessage implements Runnable { private InputStream inputStream; private Socket socket; private byte[] buffer; public CGetMessage(Socket socket) { this.socket = socket; try { inputStream = socket.getInputStream(); } catch (IOException e) { e.printStackTrace(); } } public void run() { String str = ""; while (true) { buffer = new byte[2048]; int n = 0; try { n = inputStream.read(buffer); str = new String(buffer, 0, n); System.out.println("服务器:" + str); } catch (IOException e) { e.printStackTrace(); break; } if (str.equals("q")) { break; } } try { if (socket != null) socket.close(); if (inputStream != null) inputStream.close(); } catch (Exception e) { } } } // 发送消息 class CSendMessage implements Runnable { private boolean socketIsExits = false; private OutputStream outputStream; private Socket socketClient; private int remotePort = 5000; private String remoteAddress = "localhost"; private byte[] buffer; public CSendMessage() throws IOException { } public void run() { String str = new String(); checkSocket(); int size = 0; while (true) { try { System.out.println("请输入:"); buffer = new byte[2048]; size = System.in.read(buffer); str = new String(buffer, 0, size); } catch (IOException e) { e.printStackTrace(); } if (socketIsExits) { try { System.out.println("客户端发送 socket:" + this.socketClient); System.out.print("客户端:" + str); outputStream.write(str.getBytes()); outputStream.flush(); } catch (Exception e) { System.out.println("客户端socket不存在。"); checkSocket(); } } else { checkSocket(); } } } private void checkSocket() { try { socketClient = new Socket(remoteAddress, remotePort); outputStream = socketClient.getOutputStream(); socketIsExits = true; } catch (Exception e) { socketIsExits = false; } } }3、SocketClient类:
Java代码
package socket._5;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class SocketClient implements Runnable {
public int remotePort = 5000;
public String remoteAddress = "localhost";
public static void main(String args[]) {
SocketClient socketClient = new SocketClient();
socketClient.run();
}
public SocketClient() {
}
public void run() {
Socket socket = null;
OutputStream outputStream = null;
byte[] buffer;
int size = 0;
try {
socket = new Socket(remoteAddress, remotePort);
outputStream = socket.getOutputStream();
System.out.println(socket);
while (true) {
System.out.println("input:");
buffer = new byte[2048];
size = System.in.read(buffer);
if (size > 0) {
outputStream.write(new String(buffer, 0, size).getBytes());
outputStream.flush();
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (socket != null)
socket.close();
if (outputStream != null)
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
java教程下载
相关文章推荐
- socket ( java ) 简单多个客户端、服务端通信(多线程)
- JAVA 服务端和客户端Socket通信的简单例子
- Java中利用socket实现简单的服务端与客户端的通信(入门级)
- java网络编程之服务端客户端socket简单通信案例
- Java IO——Socket:通过多线程实现多客户端与一个服务端通信
- Java IO——Socket:通过多线程实现多客户端与一个服务端通信
- socket ( java ) 简单客户端、服务端通信
- Java中利用socket实现简单的服务端与客户端的通信(基础级)
- Java中利用socket实现简单的服务端与客户端的通信(中级)——实现任意双向通信
- 使用socket实现简单的客户端和服务端通信(C#语言)
- Java 利用套接字Socket实现简单的服务器与客户端通信
- Java回炉重造(一)Socket的客户端和服务端通信
- 基于tcp协议的socket客户端与服务端的通信-java
- Java 利用套接字Socket实现简单的服务器与客户端通信
- Java review--NIO实例:实现服务端和客户端的简单通信
- Java Socket多线程服务端、客户端
- Java--Socket客户端,服务端通信
- Android学之客户端服务端Socket简单通信
- socket编程 单向服务端与客户端通信之简单协议,仅供参考
- jav服务端-客户端Socket通信改进(多线程)