socketclient的简单封装

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class SocketClientUtils {
	private static Logger  logger = LoggerFactory.getLogger(SocketClientUtils.class);  
	private static Socket socket;
	
	/**socket提交访问数据
	 * @param url
	 * @param params
	 * @return
	 */
	public static String sendSocket(String url,int port,String sendMsg) throws Exception{
		logger.info("socket request url :"+url+"\nport:"+port+"\nsendMsg:"+sendMsg);
		OutputStream out = null ;
		InputStream in = null;
		String msg = null;
		try {
			if(null==socket||socket.isClosed()){
		    	socket = new Socket(url, port);  //启动socket,并连接本地主机的相应端口号 
		    	socket.setKeepAlive(true);
		    }
			out = socket.getOutputStream();//获取服务端的输出流,为了向服务端输出数据  
		    in=socket.getInputStream();//获取服务端的输入流,为了获取服务端输入的数据  
		    out.write(sendMsg.getBytes("GBK"));//发送数据给服务端  
		    out.flush();
		    byte[] buff = new byte[256];
		    int len = 0;
		    len =  in.read(buff);
		    msg =new String(buff,0,len,"GBK");
		} catch (Exception e) {
			if(null!=in){
				in.close();
			}
			if(null!=out){
				out.close();
			}
			if(null!=socket){
				socket.close();
			}
			out = null;
			in = null;
			socket = null;
			e.printStackTrace();
			logger.error("socket异常:"+e.getMessage());
			throw new Exception(e.getMessage());
		}finally{
			if(null!=in){
				in.close();
			}
			if(null!=out){
				 out.close();
			}
		    if(socket.isInputShutdown()){
		    	socket.shutdownInput();
		    }
		    if(socket.isOutputShutdown()){
		    	socket.shutdownOutput();
		    }
		    logger.info("socket response msg :"+msg);
		}
	    return msg;
	}
	
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中的 Socket 类提供了底层的网络编程接口,但使用起来相对较为繁琐,因此可以进行封装,以便更方便地使用。以下是一个简单的 C# Socket 封装示例: ```csharp using System; using System.Net; using System.Net.Sockets; using System.Text; public class SocketClient { private Socket _socket; private byte[] _buffer = new byte[1024]; public SocketClient(string ipAddress, int port) { IPAddress ip = IPAddress.Parse(ipAddress); IPEndPoint remoteEP = new IPEndPoint(ip, port); _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _socket.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), _socket); } private void ConnectCallback(IAsyncResult ar) { Socket socket = (Socket)ar.AsyncState; socket.EndConnect(ar); } public void Send(string data) { byte[] byteData = Encoding.ASCII.GetBytes(data); _socket.BeginSend(byteData, 0, byteData.Length, 0, new AsyncCallback(SendCallback), _socket); } private void SendCallback(IAsyncResult ar) { Socket socket = (Socket)ar.AsyncState; int bytesSent = socket.EndSend(ar); Console.WriteLine("Sent {0} bytes to server.", bytesSent); } public void Receive() { _socket.BeginReceive(_buffer, 0, _buffer.Length, 0, new AsyncCallback(ReceiveCallback), _socket); } private void ReceiveCallback(IAsyncResult ar) { Socket socket = (Socket)ar.AsyncState; int bytesRead = socket.EndReceive(ar); if (bytesRead > 0) { string data = Encoding.ASCII.GetString(_buffer, 0, bytesRead); Console.WriteLine("Received: {0}", data); } } public void Close() { _socket.Shutdown(SocketShutdown.Both); _socket.Close(); } } ``` 这个示例中,我们创建了一个名为 `SocketClient` 的类,该类实现了一个基本的 TCP 客户端。在构造函数中,我们使用指定的 IP 地址和端口号初始化了一个 `IPEndPoint` 对象,并创建了一个 `Socket` 对象。在连接服务器时,我们使用 `BeginConnect` 方法异步地连接服务器,并在连接成功后调用 `ConnectCallback` 方法。在发送数据时,我们使用 `BeginSend` 方法异步地发送数据,并在发送完成后调用 `SendCallback` 方法。在接收数据时,我们使用 `BeginReceive` 方法异步地接收数据,并在接收完成后调用 `ReceiveCallback` 方法。在关闭客户端时,我们使用 `Shutdown` 方法关闭连接并调用 `Close` 方法释放资源。 以上是一个简单的 C# Socket 封装示例,实际应用中,可能需要根据具体需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值