网络编程(TCP)

来源:互联网 发布:php ajax 跨域 jsonp 编辑:程序博客网 时间:2024/05/16 08:57

TCP传输

 ● Socket和ServerSocket
 ● 建立客户端和服务器端
 ● 建立连接后,通过Socket中的IO流进行数据的传输。
 ● 关闭Socket
同样,客户端与服务器端是两个独立的应用程序。


演示tcp传输。
1.tcp分客户端和服务器端。

2.客户端对应的对象是Socket,服务器端对应的对象是ServerSocket。

需求:客户端给服务端发送数据,服务端收到后,给客户反馈信息。

package it.practise.com.socket;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;/* * 演示tcp的传输的客户端和服务端的互访。 * 需求:客户端给服务端发送数据,服务端收到后,给客户反馈信息。 */public class TcpDemo2 {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}}/* * 客户端 * 1。建立Socket服务,制定要连接的主机和端口。 * 2。获取Socket流中的输出流,将数据写到该流中,通过网络发送给服务端。 * 3。获取Socket流中的输入流,将服务器端反馈的数据获取到,并打印。 * 4。关闭客户端资源。 */class TcpClient2 {public static void main(String[] args) throws Exception {Socket s = new Socket("192.168.0.100", 10004);OutputStream out = s.getOutputStream();out.write("Hello! Server さん.".getBytes());InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf, 0, len));}}class TcpServer2 {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(10004);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip + "...cennected");InputStream in = s.getInputStream();byte[] buf = new byte[1024];int len = in.read(buf);System.out.println(new String(buf, 0, len));OutputStream out = s.getOutputStream();out.write("Hello! Clent さん.".getBytes());s.close();ss.close();}}


练习:建立一个文本转换服务器。
客户端给服务端发送文本,服务端将文本转成大写,返回给客户端。

而且客户端可以不断的进行文本转换,客户端输入over,结束。


分析:
既然是操作设备上的数据,那么就可以使用IO技术,并按照IO操作规则来思考。
源:键盘录入
目的:网络设备,网络输出流。而且操作是文本数据,可以选择字符流。


步骤:
1.建立服务。
2.获取键盘录入。
3.将数据发送给服务端。
4.获取服务端返回的数据。
5.结束,关闭资源。


package it.practise.com.socket;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class TextConvert {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}}class TransClient {public static void main(String[] args) throws Exception {Socket s = new Socket("192.168.0.100", 10005);// 定义读取键盘录入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 定义目的,将数据写入到socket输出流,发送给服务器。BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//定义一个socket读取流,读取服务端返回的大写信息,BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line = br.readLine()) != null) {if("over".equals(line))break;bufOut.write(line);bufOut.newLine();bufOut.flush();String data = bufIn.readLine();System.out.println(data);}br.close();s.close();}}class TransServer {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(10005);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip + "...connected !");// 读取socket读取流中的信息BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));// 将转换后的数据写入到socket输入流,并发送给客户端BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while((line = bufIn.readLine()) != null) { bufOut.write(line.toUpperCase()); bufOut.newLine(); bufOut.flush();}s.close();ss.close();}}




练习:TCP上传图片


Ps:shutdownOutput() 关闭客户端的输出流,相当于给流中加入一个结束标记-1

package it.practise.com.socket;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class UploadPicture {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}}class PictureClient {public static void main(String[] args) throws Exception {Socket s = new Socket("", 10006);BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File("G:\\demo\\songshu.gif")));BufferedOutputStream bisOut = new BufferedOutputStream(s.getOutputStream());byte[] buf = new byte[1024 * 1024];int len = 0;while((len = bis.read(buf)) != -1) {bisOut.write(buf, 0, len);}s.shutdownOutput();BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = brIn.readLine();System.out.println(line);bis.close();s.close();}}class PictureServer {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(10006);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip + "...connected !");BufferedInputStream bisIn = new BufferedInputStream(s.getInputStream());FileOutputStream fos = new FileOutputStream(new File("G:\\songshu.gif"));byte[] buf = new byte[1024 * 1024];int len = 0;while((len = bisIn.read(buf)) != -1) {fos.write(buf, 0, len);}PrintWriter pw = new PrintWriter(s.getOutputStream(), true);pw.println("上传成功!");fos.close();s.close();ss.close();}}



package it.practise.com.socket;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.ServerSocket;import java.net.Socket;public class TextConvert {/** * @param args */public static void main(String[] args) {// TODO Auto-generated method stub}}class TransClient {public static void main(String[] args) throws Exception {Socket s = new Socket("192.168.0.100", 10005);// 定义读取键盘录入BufferedReader br = new BufferedReader(new InputStreamReader(System.in));// 定义目的,将数据写入到socket输出流,发送给服务器。BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//定义一个socket读取流,读取服务端返回的大写信息,BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));String line = null;while((line = br.readLine()) != null) {if("over".equals(line))break;bufOut.write(line);bufOut.newLine();bufOut.flush();String data = bufIn.readLine();System.out.println(data);}br.close();s.close();}}class TransServer {public static void main(String[] args) throws Exception {ServerSocket ss = new ServerSocket(10005);Socket s = ss.accept();String ip = s.getInetAddress().getHostAddress();System.out.println(ip + "...connected !");// 读取socket读取流中的信息BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));// 将转换后的数据写入到socket输入流,并发送给客户端BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line = null;while((line = bufIn.readLine()) != null) { bufOut.write(line.toUpperCase()); bufOut.newLine(); bufOut.flush();}s.close();ss.close();}}

0 0
原创粉丝点击