service:
package tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TcpService {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
System.out.println("服务器运行!");
// 创建连接端口
ServerSocket serverSockert=new ServerSocket(1111);
Socket accept = serverSockert.accept();
try {
while(true) {
// 获取与客户端的连接
String ip=accept.getInetAddress().getHostAddress();
System.out.println("ip:"+ip);
InputStream inputStream = accept.getInputStream();
byte[] buf=new byte[1024];
int len =inputStream.read(buf);
String str=new String(buf,0,len);
System.out.println(str);
// 回复给客户端信息
OutputStream outPutStream=accept.getOutputStream();
Scanner scanner=new Scanner(System.in);
System.out.println("向客户端发送信息:");
if(scanner.hasNext()) {
String strNext=scanner.next();
outPutStream.write(strNext.getBytes());
}
}
} finally {
// TODO: handle finally clause
// 关闭连接
accept.close();
serverSockert.close();
}
}
}
client:
package tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TcpClient {
public static void main(String[] args) throws UnknownHostException, IOException {
// TODO Auto-generated method stub
System.out.println("客户端运行!");
// 连接服务端的ip和端口
Socket socket=new Socket("192.168.138.1",1111);
OutputStream outPutStream=socket.getOutputStream();
Scanner scanner=new Scanner(System.in);
try {
while (true) {
// 获得socket中的io流
System.out.println("向服务端发送信息:");
if(scanner.hasNext()) {
String strNext=scanner.next();
outPutStream.write(strNext.getBytes());
}
// io流中只能传输字节
// 收到服务器端回复的内容
InputStream inputStream=socket.getInputStream();
byte[] buf=new byte[1024];
int len =inputStream.read(buf);
String str=new String(buf,0,len);
System.out.println("服务器回复内容:"+str);
}
} finally {
// TODO: handle finally clause
//关闭连接
socket.close();
}
}
}
inputStream.read:
1 、read () 方法:
这个方法 从输入流中读取数据的下一个字节。
2 、read (byte[] b,int off,int len) 方法:
byte[] b:将需要的值传入到b里面保存;
int off: offset,偏移量;
int len: 读取的长度,<=len;
3 、 read (byte[] b) 方法:
将输入流中的一定量的字节读取到b中,这里面的一定量指的是你对b的定义大小;
java.util.Scanner:是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。
Scanner.next():读取连续一行,中间不能有空格,否则空格之后的不能被读取
Scanner.nextLine():读取一行包括空格以及空格之后的数据