Java:TCP网络编程原理及应用
一、服务器端Server:
1.创建一个ServerSocket对象,并指定一个系统端口号(不冲突即可)。
2.使用ServerSocket对象的accept()方法,等待客户的socket请求;并获得该socket对象。
3.通过socket对象的getInputstream()方法,取得socket对象中的网络字节输入流,并创建一个InputStream对象。
4.使用InputStream对象的.read方法读取用户发送的数据。可创建byte数组提高读取效率。
5.使用Socket对象的gteOutputStream方法创建网络字节输出流,Outputstream对象。
6.使用OutputStream对象的.write方法给客户回写数据。
7.释放资源:关闭socket, 关闭server。
二、客户端:Client
1、创建一个Socket请求对象,并绑定服务器的IP和端口号(一服务器一致);
2、使用socket对象的.getOutputStream方法创建一个网络字节输出流的OutputStream对象。
3、使用该OutputStreamc对象的.write写入方法,给服务发送数据。(对象.getbytes方法可以转换成字节)
4、接收数据的方法如下:
(1)调用Socket对象的getInputStream方法创建一个InputStream对象,用来接收服务器返回的数据流。
(2)创建数组bytes来提高读取的效率,用len来记录数组的长度;
(3)使用InputStreamc对象的.read方法来读取,服务器回传的数据。
也可以使用while循环来读取数据,判断是否等于-1;
(4)数据可以打印sout(new String(bytes,0,len))
(5)释放资源:socket.close;
package day03;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/** 服务器端:
*TCP编程练习:接收客户端上传的文字 :你好服务器,返回:服务器收了
*/
public class TcpServer01 {
public static void main(String[] args) throws IOException {
ServerSocket server= new ServerSocket(8981);
Socket socket = server.accept();
InputStream sin = socket.getInputStream();
byte[] bytes=new byte[1024];
int len=0;
len=sin.read(bytes); //读取并返回一个数组对象bytes
System.out.println(new String(bytes,0,len));
//返回数据编写
OutputStream sou = socket.getOutputStream();
sou.write("服务器收到了消息!".getBytes());
sou.close();
server.close();
}
}
客户端:
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
/**
* @author hutao
* @date 2019/11/28 11:12 TCP编程练习:接收客户端上传的文字 :你好服务器,返回:服务器收了
*/
public class TcpClientDemo01 {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("127.0.0.1",8981);
OutputStream cou = socket.getOutputStream();
cou.write("你好服务器!我请求连接你".getBytes());
//以下是接收数据
InputStream cin = socket.getInputStream();
byte[] bytes=new byte[1024];
int len=0;
len=cin.read(bytes);
System.out.println(new String(bytes,0,len));
socket.close();
}
}