三月13日 网络编程2-TCP(略看)

3月13日 网络编程2------TCP(略看)

TCP传输:

Socket(客户端)和ServerSocket(服务端)

建立客户端和服务端

建立连接后,通过Socket中的IO流进行数据的传输

关闭socket

 

 

1.客户端:

该对象建立时就可以连接指定的主机,TCP是面向连接的,所以在建立SOcket服务时,就要

有服务端存在

形成通路后进行数据的传输

 

步骤:

创建Socket服务。并指定要连接的主机和端口 SocketAddress , sort) 通路建立~通路

一建立就有Socket流。

getOutputStream

getInputStream

2.获取是Socket流中的输出流

3.write方法写入

 

2.服务端:

1.建立服务端 ServerSocket(绑定端口)给服务端打数字标识

2.获取连接过来的客户端对象  通过ServerSocketaccept方法完成。没有连接就

wait所以这个方法是阻塞式的 返回Socket

3.客户端发过来数据,服务端使用对应的客户端对象,并获取客户端对象的读取流

4.(可选)关闭服务端

 

import java.io.OutputStream;

import java.net.Socket;

 

 

//写一个客户端,将数据发给服务器端

public class TCPCilent 

{

public static void main(String[] args) throws Exception

{

Socket s = new Socket("192.168.1.6",24587);

OutputStream out = s.getOutputStream();

out.write("tcp ge men lai le!!".getBytes());

s.close();

}

}

 

 

 

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

//将接收到的数据打印在控制台上

public class TCPServer 

{

public static void main(String[] args) throws IOException

{

ServerSocket ss = new ServerSocket(24587);

Socket s = ss.accept();

InputStream is = s.getInputStream();

byte[] buf = new byte[1024];

int len = 0;

while((len = is.read(buf))!= -1)

{

String str = new String(buf,0,len);

System.out.println(str);

}

s.close();

}

}

 

 

 

TCP传输过程中,客户端和服务端的互访

 

需求:客户端给服务端发数据,服务端给客户端反馈

 

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.ServerSocket;

import java.net.Socket;

 

//服务端

public class TCPServer

{

public static void main(String[] args) throws IOException

{

ServerSocket ss = new ServerSocket(19906);

Socket s = ss.accept();

InputStream in = s.getInputStream();

String ip = s.getInetAddress().getHostAddress();

System.out.println(ip+"........connected");

byte[] buf = new byte[1024];

int len = in.read(buf);

System.out.println(new String(buf,0,len));

OutputStream out = s.getOutputStream();

out.write("服务端收到信息!!!!".getBytes());

s.close();

}

}

 

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;

 

//客户端

public class TCPCilent

{

public static void main(String[] args) throws UnknownHostException, 

IOException

{

Socket s = new Socket("192.168.1.6",19906);

OutputStream out = s.getOutputStream();

byte[] buf = new byte[1024];

out.write("测试数据是否传送到服务端,服务端收到请回

话!!".getBytes());

InputStream in = s.getInputStream();

int len = in.read(buf);

System.out.println(new String(buf,0,len));

s.close();

}

}

 

 

 

 

 

 

 

 

 

//客户端写入数据,服务端将其转换为大写,并返回客户端

 

 

 

 

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.ServerSocket;

import java.net.Socket;

 

//客户端写入数据,服务端将其转换为大写,并返回客户端

//服务端

 

public class TCPServer

{

public static void main(String[] args) throws IOException

{

ServerSocket ss = new ServerSocket(9127);

Socket s = ss.accept();

//从客户端写入的数据流

BufferedReader bfIn = 

new BufferedReader(new InputStreamReader(s.getInputStream()));

//发往客户端的大写字母数据

BufferedWriter bfOut = 

new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

String line = null;

while((line = bfIn.readLine()) != null)

{

bfOut.write(line.toUpperCase());

bfOut.newLine();

bfOut.flush();

}

s.close();

}

}

 

 

 

 

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

import java.net.UnknownHostException;

 

//客户端写入数据,服务端将其转换为大写,并返回客户端

//客户端

public class TCPCilent

{

public static void main(String[] args) throws UnknownHostException, IOException

{

Socket s = new Socket("192.168.1.6",9127);

//通过键盘录入的数据流

BufferedReader bfr = 

new BufferedReader(new InputStreamReader(System.in));

//读取服务端发来的大写字母流

BufferedReader bfIn = 

new BufferedReader(new InputStreamReader(s.getInputStream()));

//发给服务端的数据流

BufferedWriter bfOut = 

new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));

String line = null;

while((line = bfr.readLine()) != null)

{

if("over".equals(line))

break;

bfOut.write(line);

bfOut.newLine();

bfOut.flush();

String str = bfIn.readLine();

System.out.println("server:   "+str);

}

bfr.close();

s.close();

}

}

 

 

shutdownOutput 关闭客户端输出流,相当于给流注入了一个结束标记

 

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

 

//通过客户端上传文件,服务端为其复制文件,并反馈回执给客户端

 

//服务端

 

public class TCPServer

{

public static void main(String[] args) throws Exception

{

ServerSocket ss = new ServerSocket(10091);

Socket s = ss.accept();

//从客户端传入的数据

InputStream isIn = s.getInputStream();

//复制后的文件

OutputStream os = new FileOutputStream("G:\\myCopy.exe");

//发给客户端的回执

OutputStream osOut = s.getOutputStream();

byte[] buf = new byte[1024*20];

int len = 0;

while((len = isIn.read(buf)) != -1)

{

os.write(buf, 0, len);

}

osOut.write("上传成功!!!!!".getBytes());

ss.close();

s.close();

os.close();

}

}

 

 

/*********************************************************/

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.net.Socket;

 

//通过客户端上传文件,服务端为其复制文件,并返回给客户端

 

//客户端

 

public class TCPCilent

{

public static void main(String[] args) throws Exception

{

Socket s = new Socket("192.168.1.6",10091);

//从本机获取的文件数据

InputStream is = new FileInputStream("G:\\1.exe");

//上传给服务端的数据

OutputStream osOut = s.getOutputStream();

//从服务端获取的数据

BufferedReader bufIn = 

new BufferedReader(new InputStreamReader(s.getInputStream()));

byte[] buf = new byte[1024*20];

int bt = 0;

while((bt = is.read(buf)) != -1)

{

osOut.write(buf,0,bt);

}

s.shutdownOutput();

String str = bufIn.readLine();

System.out.println(str);

bufIn.close();

s.close();

is.close();

}

}