Java——网络编程




// TODO Auto-generated method stub

//获取本地主机IP对象

InetAddress ip = InetAddress.getLocalHost();

System.out.println(ip.getHostAddress());

System.out.println(ip.getHostName());

//获取其它主机ip地址对象

ip = InetAddress.getByName("www.sina.com");

System.out.println(ip.getHostAddress());

System.out.println(ip.getHostName());



通讯的两端

UDP建立

System.out.println("发送端启动--------------------------------");

/*

 * 创建UDP传输的发送端。

 * 思路:

 * 1.建立udp的socket服务。

 * 2.将要发送的数据进行封装到数据包中。

 * 3.通过udp的socket服务将数据包发送过去。

 * 4.关闭socket服务。

 */

//1.udpsocket服务,使用DatagramSocket对象。

DatagramSocket ds = new DatagramSocket();

//2.将要发送的 数据进行封装到数据保种。

 

String str = "嗨。哥们是杨超。!!";

//使用DatagramPacket将数据封装到该对象中。

byte[] buf = str.getBytes();

DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000);

//3.通过UDP的socket服务将数据包发送出去。  使用send方法

ds.send(dp);

//关闭资源

ds.close();

---------------------------------------------------------------------------------------------------------

System.out.println("接受端启动-----------------------------------");

/*

 * 建立UDP接受端的思路:

 * 思路:

 * 1.建立udp socket服务。   由于是要接受数据   所以  必需要明白一个port号。。。。

****

 * 2.创建数据包,用存储接收到的数据。方便使用数据包对象的方法解析这些数据。

 * 3.使用socket服务的receive方法将接收到的数据存储到数据包中。

 * 4.通过数据包的方法解析数据包中的数据。

 * 5.关闭资源。

 */

//1.建立udp socket服务。

DatagramSocket ds = new DatagramSocket(10000);

//创建数据包

byte[] buf = new byte[1024];

DatagramPacket dp = new DatagramPacket(buf, buf.length);

//3.使用接受方法将数据包存储到数据包中。

ds.receive(dp);//堵塞式的方法*********

//4.通过数据包对象的方法。  解析当中的数据,比方  地址。port。 数据内容。

String ip = dp.getAddress().getHostAddress();

int port = dp.getPort();

String text = new String(dp.getData(), 0, dp.getLength() );

System.out.println(text);

ds.close();

=================================================================================

//server端接收client发送过来的数据, 并打印在控制台上。

/*

 * 建立tcpserver端的思路:

 * 1.创建serversocket服务。通过ServerSocket对象。

 * 2.服务端必须对外提供一个port。否则client无法连接。

 * 3.获取链接过来的的client对象。

 * 4.通过client对象获取socket流读取client发来的数据。并打印在控制台上。

 * 5。关闭资源。关闭client资源,关闭server段资源。

 */

//1.创建server对象。

ServerSocket ss = new ServerSocket(100002);

//2获取连接过来的client对象。

Socket s = new Socket();

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

//3通过socket对象获取输入流。  尧都区client发来的数据。

InputStream in = s.getInputStream();

byte[] buf = new byte[1024];

int len = in.read(buf);

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

System.out.println(ip + ":" + text);

s.close();

---------------------------------------------------------------------------------------------

/*

 * 

 * 

 * 

 */

//创建clientsocket服务。

Socket socket = new Socket("127.0.0.1", 10002);

//获取socket流中的输出 流

OutputStream out = socket.getOutputStream();

//使用输出流将指定的数据写出去。

out.write("我是杨超,我正在学习java。".getBytes());

//关闭资源

socket.close();

====================================================================================

/*

 * 思路:

 * client:

 * 1.须要创建socket端点。

 * 2。client的数据源:键盘:

 * 3.client的目的:  socket

 * 4.接收server的数据。  源:socket

 * 5,将数据显示在打印出来,  目的:  控制台。

 * 6.在这些流中操作数据。都是文本数据。

 * 

 * 转换client:

 * 1.创建socketclient对象。

 * 2.获取键盘录入,

 * 3.将录入的信息 发送给socket输出流。

 */

//1.创建  socket  client对象。

Socket s = new Socket("127.0.0.1", 10004);

//2.获取键盘录入。

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

//3socket输出流

PrintWriter out = new PrintWriter(s.getOutputStream(), true);

//4.socket输入流,  读取server端返回的大写数据

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

String line = null;

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

{

if("over".equals(line))

{

break;

}

out.println(line);

//读取server端返回的  一行大写  

String upperStr = bufIn.readLine();

System.out.println(upperStr);

}

s.close();

}

-------------------------------------------------------------------------------------------------------

/*

 * server端:

 * 转换分析:

 * 1.serversocket服务。

 * 2.获取socket对象。

 * 3.源:  socket 读取client发过来的须要转换的数据。

 * 4.目的:  显示 在控制台上,

 * 5.将数据装换成大写  发给client。

 */

//1.获取serversocket对象 。

ServerSocket ss = new ServerSocket(10004);

//2.获取socket对象。

Socket s = ss.accept();

//获取ip

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

System.out.println(ip+"连接进来了!

");

//3.获取socket 读取流。

  并装饰。

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

//4.获取socket的输出流 。 并装饰。

PrintWriter out = new PrintWriter(s.getOutputStream(), true);

String line = null;

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

{

System.out.println(line);

out.println(line.toUpperCase());

}

s.close();

ss.close();

========================================================================================================

/*server端:  上传文本文件

 * 

 */

ServerSocket ss = new ServerSocket(10005);

Socket s = ss.accept();

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

BufferedWriter bufw = new BufferedWriter(new FileWriter("server.txt"));

String line = null;

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

{

// if("over".equals(line))

// break;

bufw.write(line);

bufw.newLine();

bufw.flush();

}

PrintWriter out = new PrintWriter(s.getOutputStream(), true);

out.println("上传成功@!

");

bufw.close();

s.close();

ss.close();

-------------------------------------------------------------------------------

/*

 * client:   上传文本文件。

 * 

 */

Socket s = new Socket();

BufferedReader bufr = new BufferedReader(new FileReader("xx.text"));

PrintWriter out = new PrintWriter(s.getOutputStream(), true);

String line = null;

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

{

    out.println(line);

}

//数据写完后  告诉server端

// out.println("over");

s.shutdownOutput();

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

String str = bufIn.readLine();

System.out.println(str);

bufr.close();

s.close();


======================================================================================================

上传图片

public class UploadPicServer

{

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

{

/*server端:   图片上传:

 * 

 */

//1.创建socket服务端:

ServerSocket ss = new ServerSocket(10006);

while(true)

{

//2.获取client:

Socket s = ss.accept();

new Thread(new UpLoadTest(s)).start();

}

}

 

}

 

class UpLoadTest implements Runnable

{

private Socket s;

public UpLoadTest(Socket s)

{

this.s = s;

}

 

@Override

public void run()

{

// TODO Auto-generated method stub

//3.读取client发来的数据

try

{

InputStream in = s.getInputStream();

//4.将读取到的数据 存储到  一个文件里。

FileOutputStream fos = new FileOutputStream("server.jpg");

byte[] buf =  new byte[1024];

int len = 0;

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

{

    fos.write(buf, 0, len);

}

//获取socket输出流   将上传信息情况  发送给client。

OutputStream out  = s.getOutputStream();

out.write("上床成功!".getBytes());

fos.close();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

finally

{

try

{

s.close();

}

catch (IOException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

 ----------------------------------------------------------------------------------------------------------------------------------------


/*  client: 上传图片

 * 

 */

//1.创建  clientsocket

Socket s = new Socket("127.0.0.1", 10006);

//2.读取client要上传的文件

FileInputStream fis = new FileInputStream("1.jpg");

//3.获取socket输出流,  将读到的的数据  发送给服务端。

OutputStream out = s.getOutputStream();

byte[] buf = new byte[1024];

int len=0;

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

{

    out.write(buf, 0, len);

}

//告诉server端这边的 数据发送完成   

s.shutdownOutput();

//获取server端     返回给client的信息:

InputStream in = s.getInputStream();

byte[] bufIn = new byte[1024];

int lenIn = in.read(bufIn);

String text = new String(buf, 0, lenIn);

System.out.println(text);

fis.close();

s.close();

 







原文地址:https://www.cnblogs.com/bhlsheji/p/5170616.html