//服务端
@RunWith(JUnit4.class) public class ServerSocketTest { @Test public void testServer() throws IOException{ ServerSocket serverSocket = new ServerSocket(8000); while(true){ //一旦连接,返回的socket包含客户端信息的socket Socket socket = serverSocket.accept(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write("host:"+socket.getInetAddress()+":"+socket.getPort()+"建立链接"); bw.flush(); bw.close(); } } }
/** * * @author lzw * 客户端 */ @RunWith(JUnit4.class) public class SocketClient { @Test public void testClient() throws UnknownHostException, IOException{ String serverMsg = null; //表示连接到服务器的 地址以及端口 SocketAddress address = new InetSocketAddress("19.95.103.112",8000); Socket socket = new Socket(); //connectionTime 使用最小时间建立连接,latency 表示最小延迟 bandwidth 表示最高宽带 //三个参数根据任意整数来决定优先级,越大整数,优先级越高 socket.setPerformancePreferences(2, 1, 3); //设置服务类型,用来描述服务的质量 0x02 低成本 0x04 高可靠性 0x08 最高吞吐量 0x10 最小延迟,还可以组合使用 // socket.setTrafficClass(0x02); //标识是否紧急数据,false接收方不作处理,直接丢弃,true,接收方正常处理,除非有更高及的协议设置,否则效果不大,接收方不会判断是否紧急数据 // socket.setOOBInline(true); //为ture时会监控连接是否活动,两个小时内没有交互,再等待12分钟,如果还是没有交互,那么会关联socket,false表示永远存在,哪怕服务器已经挂了 // socket.setKeepAlive(true); //设置输入数据缓冲区大小,设置大了减少交互次数,对于网络游戏对数据即时性要求高的,应该设置更小的值 // socket.setReceiveBufferSize(0); //设置写出缓冲区大小,同理setReceiveBufferSize // socket.setSendBufferSize(0); //必须在读取输入流之前设置,表示等待输入流数据超时时间。默认是0,无限等待 // socket.setSoTimeout(1000); //发送方socket被调用close之后,是否延迟关闭,继续发送数据。等待时间超时才关闭。 // socket.setSoLinger(true, 30); //当接收方socket被关闭的时候不会马上释放端口,而是接收完数据以后才释放,为了不让正在发送的数据,被下一个绑定到刚释放的端口上的SOCKET获取到,此方法必须在绑定端口之前设定,否则无效 // socket.setReuseAddress(true); //是否使用Negale算法,false为使用,true为不是用。 // socket.setTcpNoDelay(true); //连接等待1分钟,如果为0,那么将永远不超时 socket.connect(address,60000);//连接 System.out.println("localPort"+socket.getLocalPort()); System.out.println("port:"+socket); InputStream inputStream = socket.getInputStream(); //读取服务端返回的数据 BufferedReader br = new BufferedReader(new InputStreamReader(inputStream)); if((serverMsg = br.readLine())!=null){ System.out.println("服务器:"+serverMsg); } br.close(); } }