package cn.com.xinli.sms.socket.tcp.server;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
public class SocketServer {
Logger log = Logger.getLogger(SocketServer.class);
private int port=80;//默认值
private ServerSocket serverSocket;
private ExecutorService executorService;//线程池
private int POOL_SIZE=10;//单个CPU线程池大小
public SocketServer(int _prot,int skt_pool_size){
if(skt_pool_size > 0){
POOL_SIZE=skt_pool_size;
}
if(_prot>0){
port= _prot;
}else{
log.error("参数错误,端口号:"+_prot+"无法识别,系统默认监听端口:"+port);
}
try {
serverSocket=new ServerSocket(port);
executorService=Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*POOL_SIZE);
log.info("INFO: CPU个数"+Runtime.getRuntime().availableProcessors()+",线程池大小("+Runtime.getRuntime().availableProcessors()+"*"+POOL_SIZE+")="+String.valueOf(Runtime.getRuntime().availableProcessors()*POOL_SIZE));
log.info("INFO: CRM socket server at "+port+" port run.");
} catch (IOException e) {
log.error("服务启动错误,启动监听错误,端口可能占用。",e);
}
}
public void service(){
while(true){
Socket socket=null;
try {
if(serverSocket==null){
return ;
}
socket=serverSocket.accept();
socket.setSoTimeout(8000);
executorService.execute(new Handler(socket));
} catch (Exception e) {
log.error("",e);
}
}
}
}
class Handler implements Runnable{
Logger log = Logger.getLogger(Handler.class);
private Socket socket;
public Handler(Socket socket){
this.socket=socket;
}
private PrintWriter getWriter(Socket socket) throws IOException{
OutputStream socketOut=socket.getOutputStream();
return new PrintWriter(socketOut,true);
}
private OutputStream getWriterSocketOut(Socket socket) throws IOException{
OutputStream socketOut=socket.getOutputStream();
return socketOut;
}
private BufferedReader getBufferedReader(Socket socket) throws IOException{
InputStream socketIn=socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn));
}
public void run(){
long begingtime = System.currentTimeMillis();
log.info("\nNew client request "+socket.getInetAddress()+":"+socket.getPort()+",begintime="+begingtime);
String requestStr = null;
try {
BufferedReader br = getBufferedReader(socket);
OutputStream pw=getWriterSocketOut(socket);
String resstr =null;
if((requestStr=br.readLine())!=null){
log.info(" request String :"+requestStr);
// resstr =echo(requestStr); //业务处理
log.info(" response String :"+resstr);
}
pw.write(resstr.getBytes());
pw.flush();
//if(msg.equals("bye")) break;
log.info("--client request success,endtime:"+(System.currentTimeMillis()-begingtime)+"\n");
} catch (IOException e) {
log.error("error: SocektThread exception.",e);
}finally{
try {
if(socket!=null)
socket.close();
} catch (IOException e) {
log.error("error: socket close exception .",e);
}
}
}
}
package cn.xinli.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class SocketClient {
protected static Log log = LogFactory.getLog(SocketClient.class);
static Socket socket;
static BufferedReader in;
static PrintWriter out;
//xujun,cut,message
public static void main(String[] args) throws Exception {
String bString = "";
try {
socket = new Socket("127.0.0.1",5555);//连接服务端
socket.setSoTimeout(7000);
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));//获得服务端发来的消息
out = new PrintWriter(socket.getOutputStream(),true); //给服务端发送消息
String content = "客户端测试";
log.info(content);
out.print(content);
out.flush();
log.info("内容已经发送给服务器端");
String b = null;
while((b=in.readLine())!=null)
{
log.info("服务端回应:"+b);
bString = b;
}
}catch(Exception e)
{
log.info("错误提示:"+e.getMessage());
}finally
{
try {
if(out!=null){
out.close();
log.info("输出流已关闭");
}else if(in!=null){
in.close();
log.info("输入流已关闭");
}else{
socket.close();
log.info("客户端Socket已关闭");
}
} catch (IOException e) {
log.info("错误提示:"+e.getMessage());
}
}
if("ok".equals(bString))
{
System.out.println("LALALLAALALA");
}
}
}
分享到:
相关推荐
"基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...
最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...
在这个"基于TCP的socket编程实例"中,我们将深入探讨如何使用socket API进行TCP通信,并通过"main"这个程序文件来理解其实现过程。 首先,TCP socket编程主要包括服务器端和客户端两部分。服务器端需要先启动,监听...
"Tcp Socket client 实例"指的是一个使用TCP协议的客户端示例程序,它通过Socket接口与服务器进行数据交互。事件驱动是一种编程模型,它使得客户端程序在接收到特定事件(如连接建立、数据接收或发送完成)时能够...
本实例将通过两个文件——`server1.c`和`client1.c`,展示如何在Linux环境下使用C语言编写一个简单的TCP socket服务器和客户端。 **TCP套接字基础** 在Linux中,创建和操作TCP套接字主要涉及到以下几个函数: 1. ...
- `new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`:用于创建一个新的Socket实例,指定IPv4地址族、流式Socket类型和TCP协议。 - `Connect()`:客户端用于连接到服务器的指定端口...
本主题聚焦于使用Java进行基于TCP的Socket编程,通过`File_client.java`和`File_server.java`两个文件来实现服务器和客户端之间的数据交换。 首先,TCP Socket编程的基础是Java的`java.net.Socket`和`java.net....
资源名:三菱Q系列PLC TCP socket通讯实例程序加技术文档 资源类型:程序源代码 源码介绍:PLC 为三菱Q06H和QJ71E71-100模块; Socket 测试软件; 参考手册:Q 系列以太网接口模块用户手册基础篇 适合人群:新手及...
首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了数据包的顺序传输和错误检查。在C#中,我们通常使用`System.Net.Sockets`命名空间中的`Socket`类来处理TCP通信。 **TCP ...
本压缩包文件“基于TCP的SOCKET编程代码包”提供了多个关于TCP SOCKET编程的实例,适用于学习和开发网络通信应用。 首先,我们要理解SOCKET,它是网络编程中的基本接口,允许应用程序通过网络发送和接收数据。在...
之后,双方通过这个Socket实例的输入输出流进行数据交换,最后关闭相关资源。 ### 2. 相关API #### 2.1 `ServerSocket` 类 - `ServerSocket(int port, int backlog)`:创建一个服务器套接字,并将其绑定到指定的...
总的来说,这个项目提供了一个实例,展示了如何结合传统的TCP Socket和现代的WebSocket技术,以及数据库管理,构建一个高效、实时的即时通信系统。这样的系统对于需要实时信息同步的场景,如在线聊天、协同办公、...
Qt TcpSocket 通信实例
4. **AppDomain**: 应用域,SuperSocket支持在一个服务实例中运行多个应用,每个应用有自己的独立配置和会话管理。 通过以上介绍,我们可以看出SuperSocket是一个强大且灵活的Socket开发框架,它不仅降低了TCP和UDP...
总结起来,这个项目提供了一个使用QT5.1和Winsock在Windows 32位系统上实现TCPsocket通信的实例,对于学习和理解如何在QT环境下编写TCP客户端和服务器程序具有很好的参考价值。通过阅读代码、注释和实践,开发者可以...
总结起来,"TCPSOCKET线程池通信客户端+服务器端示例代码"是.NET开发者学习如何利用TCP SOCKET进行高效、多线程通信的宝贵资源。通过理解和实践这个示例,开发者可以更好地掌握网络编程技术,为开发高性能的网络应用...
2. 创建Socket实例:使用`new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`创建一个Socket实例,其中`AddressFamily.InterNetwork`代表IPv4,`SocketType.Stream`表示使用TCP,`...
在这个“socket文件传输(TCP)源码实例”中,我们将深入理解如何利用TCP协议通过socket进行文件传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的...
在计算机网络中,TCP...总的来说,这个项目提供了从头开始理解TCP socket通信的一个基础实例,涵盖了从建立连接、数据传输到关闭连接的全过程。对于学习网络编程和C语言的人来说,这是一个很好的实践案例。
本实例将探讨如何使用C++编程语言实现基于TCP的socket客户端和服务端的通信。 首先,让我们了解TCP的基础知识。TCP是一种面向连接的协议,它确保了数据的可靠传输,通过三次握手建立连接,然后进行数据交换,最后...