注意的重点:在客服端和服务端 数据传输互访时,因为有太多是阻塞式方法。输出时记得 加上换行标记newLine()、flush
()刷新缓冲区,如果不行必须代码有意识的加入标记操作符或文字,避免无休止的等待。
PrintWriter p= new PrintWriter(ss.getOutputStream( ) ,true);
p.println();这个方法也是带换行标记的(换行标记就是回车符),XReader对象的reader()或newLine()也能唤醒;
/** 客服端 */
public class Tcpclient {
/**
* TCP是面向连接的 Socket对象,对象一建立就可以连接指定的主机。
* 在客服端建立连接时,就要有服务端存在,一但连接成功,形成通路有,就该在通路之间进行数据的传输; 步骤:
* 1.创建Socket服务,并指定服务器和端口; 2.用Socket的网络流(IO)传输数据;
*
* @throws Exception
* @throws UnknownHostException
*/
public static void main(String[] args) throws Exception {
// 创建对象
Socket s = new Socket("192.168.1.101", 10002);
// 传输数据;
OutputStream ou = s.getOutputStream();
byte[] buf = "886".getBytes();
ou.write(buf);
InputStream i = s.getInputStream();
byte[] buff = new byte[1024];
int len = i.read(buff);
String str = new String(buff, 0, len);
System.out.println(str);
System.out.println("`````````````````");
s.close();
}
}
import java.io.*;
import java.net.*;
public class TcpSeverSocket {
/**
* 1.建立服务端的SeverSocket的服务,并监听一个端口
* 2、获取连接过来的客服端的对象。accept是一个阻塞式方法;所以没有连接的时候它会等。
* 3.服务端会使用客服端发送过来对应的对象,并使用客服端发送过来的流来读取发过来的信息数据
* 4.关闭服务端(可选操作);
*
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10002);
Socket socket = ss.accept();
InputStream i = socket.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = i.read(buf)) != -1) {
String str = new String(buf, 0, len);
String ip = new String(socket.getInetAddress().getHostAddress());
System.out.println(ip);
System.out.println(str);
if ("886".equals(str))//有意识的打断无休止的阻塞
break;
}
OutputStream o = socket.getOutputStream();
byte[] bufoo = "nihaoclient".getBytes();
o.write(bufoo);
o.flush();
System.out.println("`````````````1");
socket.close();
}
}
()刷新缓冲区,如果不行必须代码有意识的加入标记操作符或文字,避免无休止的等待。
PrintWriter p= new PrintWriter(ss.getOutputStream( ) ,true);
p.println();这个方法也是带换行标记的(换行标记就是回车符),XReader对象的reader()或newLine()也能唤醒;
/** 客服端 */
public class Tcpclient {
/**
* TCP是面向连接的 Socket对象,对象一建立就可以连接指定的主机。
* 在客服端建立连接时,就要有服务端存在,一但连接成功,形成通路有,就该在通路之间进行数据的传输; 步骤:
* 1.创建Socket服务,并指定服务器和端口; 2.用Socket的网络流(IO)传输数据;
*
* @throws Exception
* @throws UnknownHostException
*/
public static void main(String[] args) throws Exception {
// 创建对象
Socket s = new Socket("192.168.1.101", 10002);
// 传输数据;
OutputStream ou = s.getOutputStream();
byte[] buf = "886".getBytes();
ou.write(buf);
InputStream i = s.getInputStream();
byte[] buff = new byte[1024];
int len = i.read(buff);
String str = new String(buff, 0, len);
System.out.println(str);
System.out.println("`````````````````");
s.close();
}
}
import java.io.*;
import java.net.*;
public class TcpSeverSocket {
/**
* 1.建立服务端的SeverSocket的服务,并监听一个端口
* 2、获取连接过来的客服端的对象。accept是一个阻塞式方法;所以没有连接的时候它会等。
* 3.服务端会使用客服端发送过来对应的对象,并使用客服端发送过来的流来读取发过来的信息数据
* 4.关闭服务端(可选操作);
*
* @throws Exception
*/
public static void main(String[] args) throws Exception {
ServerSocket ss = new ServerSocket(10002);
Socket socket = ss.accept();
InputStream i = socket.getInputStream();
byte[] buf = new byte[1024];
int len = 0;
while ((len = i.read(buf)) != -1) {
String str = new String(buf, 0, len);
String ip = new String(socket.getInetAddress().getHostAddress());
System.out.println(ip);
System.out.println(str);
if ("886".equals(str))//有意识的打断无休止的阻塞
break;
}
OutputStream o = socket.getOutputStream();
byte[] bufoo = "nihaoclient".getBytes();
o.write(bufoo);
o.flush();
System.out.println("`````````````1");
socket.close();
}
}