client
public class myclient { public static void main(string[] args) { objectoutputstream oos = null; bytearrayoutputstream bos = null; socket client = null; try { people p = new people(2,yangyu,4,5,6); oos = new objectoutputstream(bos = new bytearrayoutputstream()); //初始化object输出流 oos.writeobject(p); //将people对象写入输出流 byte[] bytes = bos.tobytearray(); //获取people对象的byte数组(也就是序列化people) client = new socket(127.0.0.1,20007); //连接127.0.0.1的20007端口 client.setsotimeout(10000); //设置超时时间 client.getoutputstream().write(bytes); //向server发送byte[]数组 byte[] bytes1 = ioutils.readfully(client.getinputstream(),18,false); //获取server返回数据 system.out.println(new string(bytes1)); system.out.println(bytes1.length); } catch (exception e) { e.printstacktrace(); }finally { try { oos.close(); bos.close(); system.out.println(client.isclosed()); client.close(); } catch (ioexception e) { e.printstacktrace(); } } } }
server
public class myserver { public static void main(string[] args) { serversocket server = null; socket client = null; objectinputstream ois = null; bytearrayinputstream bis = null; try { server = new serversocket(20007); //启动socket server,监听20007端口 client = server.accept(); //阻塞并等待接收客户端发送数据并生成client byte[] bytes = ioutils.readfully(client.getinputstream(),-1,false);//获取客户端发送过来的数据 bis = new bytearrayinputstream(bytes); ois = new objectinputstream(bis); people people = (people) ois.readobject();//反序列化 system.out.println(people name:+people.getname()); string res = 消息已经收到; client.getoutputstream().write(res.getbytes());//向客户端发送数据 } catch (exception e) { e.printstacktrace(); }finally { try { bis.close(); ois.close(); client.close(); server.close(); } catch (ioexception e) { e.printstacktrace(); } } } }
以上一个client和一个server,最简单的例子,但是体现socket编程。
如果需要server服务端一直监听端口,那么只需要循环就可以(server.accept()会阻塞等待请求),至于需要高并发的响应,那么server对数据业务的处理交由线程池来做吧。
