文章链接:http://javasam.iteye.com/blog/1484307
文章链接:http://caihx.iteye.com/blog/605186
文章链接:http://caihx.iteye.com/blog/605191
package com.googlecode.garbagecan.test.socket.MutlipThread;
import java.io.*;
import java.net.*;
public class ConnectionHandler implements Runnable {
protected Socket socketToHandle;
public ConnectionHandler(Socket aSocketToHandle) {
socketToHandle = aSocketToHandle;
}
public void run() {
try {
PrintWriter streamWriter = new PrintWriter(socketToHandle
.getOutputStream());
BufferedReader streamReader = new BufferedReader(
new InputStreamReader(socketToHandle.getInputStream()));
String fileToRead = streamReader.readLine();
BufferedReader fileReader = new BufferedReader(new FileReader(
fileToRead));
String line = null;
while ((line = fileReader.readLine()) != null)
streamWriter.println(line);
fileReader.close();
streamWriter.close();
streamReader.close();
} catch (Exception e) {
System.out.println("Error handling a client: " + e);
}
}
}
package com.googlecode.garbagecan.test.socket.MutlipThread;
import java.io.*;
import java.net.*;
public class MultithreadedRemoteFileServer {
protected int listenPort;
public MultithreadedRemoteFileServer(int aListenPort) {
listenPort = aListenPort;
}
public void acceptConnections() {
try {
ServerSocket server = new ServerSocket(listenPort, 5);
Socket incomingConnection = null;
while (true) {
incomingConnection = server.accept();
handleConnection(incomingConnection);
}
} catch (BindException e) {
System.out.println("Unable to bind to port " + listenPort);
} catch (IOException e) {
System.out.println("Unable to instantiate a ServerSocket on port: "
+ listenPort);
}
}
public void handleConnection(Socket connectionToHandle) {
new Thread(new ConnectionHandler(connectionToHandle)).start();
}
public static void main(String[] args) {
MultithreadedRemoteFileServer server = new MultithreadedRemoteFileServer(
3000);
server.acceptConnections();
}
}
package com.googlecode.garbagecan.test.socket.MutlipThread;
import java.net.Socket;
import sun.jdbc.odbc.ee.ConnectionHandler;
/**
* 这里我们将讨论 handleConnection() 方法的结构,这个方法生成一个新的 Thread 来处理每个连接。
* 我们将分两部分讨论这个问题。
* 这一屏我们将着重该方法本身,然后在下一屏研究该方法所使用的 ConnectionHandler 助手类的结构。
*
*
*/
public class RemoteFileServer {
public void handleConnection(Socket connectionToHandle) {
// new Thread(new ConnectionHandler(connectionToHandle)).start();
}
}
package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class MyClient {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost", 10000);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while (true) {
String msg = reader.readLine();
out.println(msg);
out.flush();
if (msg.equals("bye")) {
break;
}
System.out.println(in.readLine());
}
socket.close();
}
}
package com.googlecode.garbagecan.test.socket.sample2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 上一篇文章中的例子有一个问题就是Server只能接受一个Client请求,
* 当第一个Client连接后就占据了这个位置,后续Client不能再继续连接,所以需要做些改动,
* 当Server没接受到一个Client连接请求之后,都把处理流程放到一个独立的线程里去运行,然后等待下一个Client连接请求,
* 这样就不会阻塞Server端接收请求了。每个独立运行的程序在使用完Socket对象之后要将其关闭。
* @author Administrator
*
*/
public class MyServer {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(10000);
while (true) {
Socket socket = server.accept();
invoke(socket);
}
}
private static void invoke(final Socket client) throws IOException {
new Thread(new Runnable() {
public void run() {
BufferedReader in = null;
PrintWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream());
while (true) {
String msg = in.readLine();
System.out.println(msg);
out.println("Server received " + msg);
out.flush();
if (msg.equals("bye")) {
break;
}
}
} catch(IOException ex) {
ex.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e) {}
try {
out.close();
} catch (Exception e) {}
try {
client.close();
} catch (Exception e) {}
}
}
}).start();
}
}
分享到:
相关推荐
C++多线程SOCKET收发纯手工打造,网上的例子和解释都不行~既可以学习多线程操作,又可以实现SOCLET编程
基于多线程实现的JavaSocket客户端-服务端点对点异步通信程序代码
多线程Socket阻塞模式下通信的例子 BCB-Socket阻塞模式通讯测试(多线程) 作者:Sncel(地狱情人) QQ:6522203 指导:invalid(空心菜) QQ:309283 http://bcb.vicp.net 测试方法: 在单机上测试: 如果有多个客户...
自己刚刚弄SOCKET,网上的很多资源都是FORM的。我自己做了一个命令台的,服务器端长时间侦听端口,当一个客户端连上后,就起一个线程来接受数据,并发送信息。客户端可以接受服务器发回的信息。并且可以多个客户端...
C写的SOCKET写的服务端程序 多线程处理客户端请求 C写的SOCKET写的服务端程序 多线程处理客户端请求 C写的SOCKET写的服务端程序 多线程处理客户端请求
可以有效理解SOCKET以及多线程,希望对初学者有所帮助,老油条就没必要过目了!
linux下多线程读写socket的简单例子,很容易学习,对于初学者有很大帮助
基于多线程和SOCKET聊天室,里面是一个例子,是基于C#的WINFORM开发的
此例由客户端和服务器端组成,由客户端发送消息,服务器端侦听到马上以弹出窗体形式呈现,代码简单明了 可以实现BS-》CS||CS->CS之间的通信, 可1对1,1对多聊天(待扩展)
基于SOCK_STREAM Socket TCp流式扫描器,程序采用多线程编写,是学习多线程Socket网络编程的好例子!
NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/1840421
NULL 博文链接:https://ghostfromheaven.iteye.com/blog/1305001
简单的Python的Socket连接的例子 包含Server和Client,还有一个多线程的测试
C# socket多线程通讯 含客户端,亲测可以用,学习的例子。
C#Socket多线程编程实例,以C#为开发工具,实现了多线程的通信
serversocket单线程跟多线程例子,很值得学习的
5个qt多线程例子,关于qt 多线程 TCP UDP socket 仅供参考
socket 多线程 练习的例子 没事还得多看看
老师 上课 带着 我们做的例子 很小巧 很清晰 在 NET 包里
vc++编写的用多线程实现客户-服务器结构的一个例子,有学习价值