Socket向服务端发送消息工具类

package com.yanek.util.socket;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.Socket;
import java.net.URLEncoder;

import org.apache.log4j.Logger;

/**
 * Socket客户端,向服务端发送消息
 * 
 *
 */
public class SocketClient {
 private static Logger logger = Logger.getLogger(SocketClient.class
   .getName());
 private static final int MAX_TIMEOUT = 10;
 
 private SocketClient() {
 }

 /**
  * 向服务端发送消息
  *
  * @param host
  *            主机Host或IP
  * @param port
  *            端口
  * @param timeout
  *            超时,单位秒
  * @param content
  *            发送内容
  */
 public static void send(String host, int port, int timeout, String content) {
  Socket s = null;
  PrintWriter out = null;
  try {
   s = new Socket(host, port);
   s
     .setSoTimeout((timeout > MAX_TIMEOUT ? MAX_TIMEOUT
       : timeout) * 1000);
   out = new PrintWriter(s.getOutputStream());
   out.write(content);
   out.flush();
  } catch (Exception e) {
   logger.error(e);
  } finally {
   if (s != null)
    try {
     s.close();
    } catch (IOException e) {
    }
   if (out != null)
    out.close();
   s = null;
   out = null;
  }
 }

 /**
  * 向SocketServer发送通信指令并获取回复数据
  *
  * @param host 主机名称或IP
  * @param port 端口
  * @param timeout 超时时间(秒)
  * @param content 指令内容
  * @return
  */
 public static String sendAndGetReply(String host, int port, int timeout,
   String content) {
  String encode = "utf-8";
  Socket s = null;
  BufferedReader in = null;
  PrintWriter out = null;
  String line = null;
  try {
   content = URLEncoder.encode(content, encode);
   s = new Socket(host, port);
   s
     .setSoTimeout((timeout > MAX_TIMEOUT ? MAX_TIMEOUT
       : timeout) * 1000);
   in = new BufferedReader(new InputStreamReader(s.getInputStream()));
   out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s
     .getOutputStream())), true);
   out.println(content);
   line = in.readLine();
  } catch (Exception e) {
   logger.error(e);
  } finally {
   if (s != null)
    try {
     s.close();
    } catch (IOException e) {
    }
   if (out != null)
    out.close();
   if (in != null)
    try {
     in.close();
    } catch (IOException e) {
    }
   s = null;
   out = null;
   in = null;
  }
  try {
   line = URLEncoder.encode(line, encode);
  } catch (UnsupportedEncodingException e) {
   logger.error(e);
  }
  return line;
 }
 
 /**
  * 向SocketServer发送通信指令,无同步回复消息
  *
  * @param host 主机名称或IP
  * @param port 端口
  * @param timeout 超时时间(秒)
  * @param content 指令内容
  * @return
  */
 public static void sendAndNoReply(String host, int port, int timeout,
   String content) {
  String encode = "utf-8";
  Socket s = null;
  PrintWriter out = null;
  try {
   content = URLEncoder.encode(content, encode);
   s = new Socket(host, port);
   s
     .setSoTimeout((timeout > MAX_TIMEOUT ? MAX_TIMEOUT
       : timeout) * 1000);
   out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(s
     .getOutputStream())), true);
   out.println(content);
  } catch (Exception e) {
   logger.error(e);
  } finally {
   if (s != null)
    try {
     s.close();
    } catch (IOException e) {
    }
   if (out != null)
    out.close();
   s = null;
   out = null;
  }
 }
}

时间: 2024-09-17 04:23:51

Socket向服务端发送消息工具类的相关文章

android开发-想用socket从服务端发送图片到客户端,但一直出错,求原因

问题描述 想用socket从服务端发送图片到客户端,但一直出错,求原因 开发-想用socket从服务端发送图片到客户端,但一直出错,求原因-socket客户端和服务端"> 如图所示,本人新人,求大神解答 解决方案 空指针从无,TestActivity的64行 解决方案二: 空指针 socket 不能执行关闭操作(其实是不能操作任何操作) 最好在操作前增加判断:if(null != socket) {} 在 {} 中做处理. 解决方案三: 应该是创建socket失败了. socket不能放在

服务端发送消息给用户

问题描述 SendMessageAPI message = (SendMessageAPI)factory.newInstance(EasemobRestAPIFactory.SEND_MESSAGE_CLASS);Map<String, String> ext = new HashMap<String,String>(); Map<String, Object> msg = new HashMap<String,Object>(); ext.put(&qu

想用socket从服务端发送图片到客户端,但一直出错,求原因

问题描述 如图所示本人新手,求大神解答.. 解决方案 解决方案二:调试看看不.

AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍      在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA中间Socket/Tcp框架进行了总体的介绍,我们知道 AgileEAS.NET SOA中间件Socket/Tcp框架是一套Socket通信的消息中间件: 二.简单例子-实现简单的服务器客户段消息应答      我们接下来实现一个简单的例子,例子的场景非常的简单,客户端向服务端发送一个请求

io流-socket 客户端读取服务端发送的 序列化流 报错

问题描述 socket 客户端读取服务端发送的 序列化流 报错 客户端 服务端 请大神指教,实在找不到原因了,对这块儿也不是很熟 解决方案 socket调用了一次getInputStream时,但又需要把这个socket的相关信息作为参数传递给别的对象时,应注意:不用直接把socket传过去,应该把对应的ObjectInputStream或ObjectOutputStream对象传递过去. 解决方案二: 直接读写Object,使用java自己的序列化不可以吗?

PC_android使用socket通信,要求PC服务端发送图片给手机客户端,并在手机显示

问题描述 PC_android使用socket通信,要求PC服务端发送图片给手机客户端,并在手机显示 本人根据"http://sishuok.com/forum/posts/list/1995.html"此网址,做了一个socket通信的例子,但是通信成功了,图片在手机中显示不出来,求解答 解决方案 http://www.cnblogs.com/tt_mc/archive/2010/06/04/1751260.html 解决方案二: http://blog.csdn.net/tobac

java-使用socket通信服务端如何处理客户端请求

问题描述 使用socket通信服务端如何处理客户端请求 场景如下: 一个服务端,一个客户端通过socket连接服务端,假如客户端要请求服务端做一件事(如调用服务端A类的a方法), 因为socket传输的是字符串,所以我现在的做法是让客户端传一个标识符a到服务端,然后服务端 通过判断传过来的是a则调用A类的a方法, 如果我要执行A类的b方法,则传b过去再判断 我想问的是有没有更好的解决方案,或现成的框架可用 解决方案 如果你这样的需求,我觉得更适合HTTP.也许玩C++的更习惯于socket.之前

.NET C/S结构 客户端通过Socket去服务端拿数据库的数据

问题描述 C端不直接访问数据库,C端通过Socket向S端发送指令,获取数据库的数据.如何实现一个函数stringSendCommand(stringCommand)即发送个获取个人信息的指令则返回个人信息的JSON数据.该函数发送请求的指令,返回服务器那边发回来的数据库数据.而不是数据都来源自Socket的Recv事件.同时,又需要Socket监听服务器端推送过来的消息. 解决方案 解决方案二:WCF和TCP长连接吗?解决方案三:我觉得读取数据库这种还是用webservice或者webapi好

socket-WebSocket服务端发消息给客户端,浏览器收到消息就关闭了

问题描述 WebSocket服务端发消息给客户端,浏览器收到消息就关闭了 自己按照 Websocket 的 文档写的, 浏览器每次连接上, 一收到消息就断开了 报错:WebSocket connection to 'ws://192.168.1.248:2051/' failed: A server must not mask any frames that it sends to the client. 但是 内容根本就没有mask 然后连网上别的websocket服务器,连上发消息正常, 然