`
jyangzi5
  • 浏览: 212324 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

基于tcp的Socket实例

阅读更多
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编程

    "基于TCP/IP的socket编程"是一个深入探讨如何使用socket接口进行网络通信的主题。Socket编程允许应用程序通过网络发送和接收数据,它是互联网上不同计算机之间交互的核心机制。 在给定的描述中,我们看到一个创新的...

    Android TCP Socket通信实例Demo源码Apk下载

    最近有个项目模块需要用到TCP Socket通讯,遇到了一个大坑,所以做了这个Demo。 本Demo主要实现了安卓(Android)TCP 客户端(Client)和服务器(Server)Demo的Socket通讯。以及对接硬件的项目数据在十六进制&&byte&&int...

    基于tcp的socket编程实例

    在这个"基于TCP的socket编程实例"中,我们将深入探讨如何使用socket API进行TCP通信,并通过"main"这个程序文件来理解其实现过程。 首先,TCP socket编程主要包括服务器端和客户端两部分。服务器端需要先启动,监听...

    Tcp Socket client实例

    "Tcp Socket client 实例"指的是一个使用TCP协议的客户端示例程序,它通过Socket接口与服务器进行数据交互。事件驱动是一种编程模型,它使得客户端程序在接收到特定事件(如连接建立、数据接收或发送完成)时能够...

    Linux TCP socket实例

    本实例将通过两个文件——`server1.c`和`client1.c`,展示如何在Linux环境下使用C语言编写一个简单的TCP socket服务器和客户端。 **TCP套接字基础** 在Linux中,创建和操作TCP套接字主要涉及到以下几个函数: 1. ...

    C# TCP Socket 通讯 实例

    - `new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`:用于创建一个新的Socket实例,指定IPv4地址族、流式Socket类型和TCP协议。 - `Connect()`:客户端用于连接到服务器的指定端口...

    基于TCP的Socket编程服务器和客户端代码

    本主题聚焦于使用Java进行基于TCP的Socket编程,通过`File_client.java`和`File_server.java`两个文件来实现服务器和客户端之间的数据交换。 首先,TCP Socket编程的基础是Java的`java.net.Socket`和`java.net....

    三菱Q系列PLC TCP socket通讯实例程序加技术文档

    资源名:三菱Q系列PLC TCP socket通讯实例程序加技术文档 资源类型:程序源代码 源码介绍:PLC 为三菱Q06H和QJ71E71-100模块; Socket 测试软件; 参考手册:Q 系列以太网接口模块用户手册基础篇 适合人群:新手及...

    c#基于TCP协议的Socket通信完整实例(实现多人聊天室)

    首先,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,它确保了数据包的顺序传输和错误检查。在C#中,我们通常使用`System.Net.Sockets`命名空间中的`Socket`类来处理TCP通信。 **TCP ...

    基于TCP的SOCKET编程代码包

    本压缩包文件“基于TCP的SOCKET编程代码包”提供了多个关于TCP SOCKET编程的实例,适用于学习和开发网络通信应用。 首先,我们要理解SOCKET,它是网络编程中的基本接口,允许应用程序通过网络发送和接收数据。在...

    JAVA实现基于Tcp协议的简单Socket通信实例

    之后,双方通过这个Socket实例的输入输出流进行数据交换,最后关闭相关资源。 ### 2. 相关API #### 2.1 `ServerSocket` 类 - `ServerSocket(int port, int backlog)`:创建一个服务器套接字,并将其绑定到指定的...

    精选_使用同一数据库基于TCP Socket和Websocket实现的相互即时通信系统_源码打包

    总的来说,这个项目提供了一个实例,展示了如何结合传统的TCP Socket和现代的WebSocket技术,以及数据库管理,构建一个高效、实时的即时通信系统。这样的系统对于需要实时信息同步的场景,如在线聊天、协同办公、...

    Qt TcpSocket 通信实例

    Qt TcpSocket 通信实例

    SuperSocket-master_Socket基于TCP、UDP

    4. **AppDomain**: 应用域,SuperSocket支持在一个服务实例中运行多个应用,每个应用有自己的独立配置和会话管理。 通过以上介绍,我们可以看出SuperSocket是一个强大且灵活的Socket开发框架,它不仅降低了TCP和UDP...

    WIN32 TCPsocket

    总结起来,这个项目提供了一个使用QT5.1和Winsock在Windows 32位系统上实现TCPsocket通信的实例,对于学习和理解如何在QT环境下编写TCP客户端和服务器程序具有很好的参考价值。通过阅读代码、注释和实践,开发者可以...

    TCPSOCKET 线程池通信客户端+服务器端示例代码

    总结起来,"TCPSOCKET线程池通信客户端+服务器端示例代码"是.NET开发者学习如何利用TCP SOCKET进行高效、多线程通信的宝贵资源。通过理解和实践这个示例,开发者可以更好地掌握网络编程技术,为开发高性能的网络应用...

    C# 网络编程之socket tcp 通讯demo样例

    2. 创建Socket实例:使用`new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)`创建一个Socket实例,其中`AddressFamily.InterNetwork`代表IPv4,`SocketType.Stream`表示使用TCP,`...

    socket文件传输(TCP)源码实例

    在这个“socket文件传输(TCP)源码实例”中,我们将深入理解如何利用TCP协议通过socket进行文件传输。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,确保了数据的...

    基于TCP的socket通信,含服务器和客户端

    在计算机网络中,TCP...总的来说,这个项目提供了从头开始理解TCP socket通信的一个基础实例,涵盖了从建立连接、数据传输到关闭连接的全过程。对于学习网络编程和C语言的人来说,这是一个很好的实践案例。

    基于TCP的socket客户端、服务端通信实例

    本实例将探讨如何使用C++编程语言实现基于TCP的socket客户端和服务端的通信。 首先,让我们了解TCP的基础知识。TCP是一种面向连接的协议,它确保了数据的可靠传输,通过三次握手建立连接,然后进行数据交换,最后...

Global site tag (gtag.js) - Google Analytics