首页 > 代码库 > Socket网络编程

Socket网络编程

使用Socket可以非常方便的进行通信,主要分成两个部分:

第一个部分ServerSocket,服务端等待客户端的连接;

第二个部分Socket,客户端连接服务端。

ServerSocket的使用方法如下

int port=23456;ServerSocket server=new ServerSocket(port);while(true){//等待客户端的连接	Socket ss=server.accept();    //收取客户端发送来的消息	BufferedReader br=new BufferedReader(new InputStreamReader(ss.getInputStream()));	String line=br.readLine();	System.out.println(line);}

Socket的使用方法如下

String ip="192.168.1.113";int port=23456;Socket socket=new Socket(ip,port);//发送消息给服务端OutputStream os=socket.getOutputStream();os.write("你好".getBytes("utf-8"));os.close();

当服务端和客户端建立连接之后,可以互相发送消息和收取消息,

使用getOutputStream()方法进行发送消息,getInputStream()方法进行接收消息。

由于网络操作响应时间不确定,因此把这类操作放入新线程当中,以避免主程序长时间阻塞。

以下是对socket操作的封装类,并且将网络操作放入了新线程当中。

public class MySocket {		private int port;		private ServerSocket server;		private List<Message> msgList;		public MySocket(int port){		this.port=port;		msgList=new ArrayList<Message>();				try{		   server=new ServerSocket(port);		   acceptThread.start();//开启接受信息线程		}catch(Exception e){			e.printStackTrace();		}	}	//发送消息线程	public void send(Message msg){		Thread sendThread=new Thread(){			@Override			public void run() {				super.run();				try {					Socket socket = new Socket(msg.getIp(),msg.getPort());					OutputStream os=socket.getOutputStream();					os.write(msg.getContent().getBytes("utf-8"));					os.close();					socket.close();				}catch (IOException e) {					e.printStackTrace();				}							}					};		sendThread.start();	}		//接受信息的线程	private Thread acceptThread=new Thread(){		@Override		public void run() {			super.run();			while(true){				try {					Socket socket=server.accept();					InputStream is=socket.getInputStream();					String content=new BufferedReader(new InputStreamReader(is)).readLine();					Message message=new Message();					message.setIp(socket.getInetAddress().toString());					message.setPort(socket.getPort());					message.setContent(content);					msgList.add(message);					System.out.println(message.getContent());					is.close();					socket.close();				} catch (IOException e) {					e.printStackTrace();				}			}		}			};}

其中所使用到的Message类如下

public class Message {		private String ip;//ip地址	private int port;//端口号	private String content;//信息内容		public Message(){ }		public Message(String ip,int port,String content){		this.ip=ip;		this.port=port;		this.content=content;	}		public String getIp() {		return ip;	}	public void setIp(String ip) {		this.ip = ip;	}	public int getPort() {		return port;	}	public void setPort(int port) {		this.port = port;	}	public String getContent() {		return content;	}	public void setContent(String content) {		this.content = content;	}	}

Socket网络编程