网络编程
简单的TCP网路程序:
①服务端—客户端—代码:
TcpService :
package com.test1;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpService {
public static void main(String[] args) throws IOException {
//创建服务器套接字对象,用于监听指定端口
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("服务器端启动了。。。");
//调用accept()方法,等待客户端连接。是一个阻塞方法
// 如果有客户端连接之后,返回一个Socket对象用于与客户端通信
Socket socket=serverSocket.accept();
System.out.println("有客户端过来了。。。");
//关闭网络对象
socket.close();
serverSocket.close();
}
}
TcpClient :
package com.test1;
import java.io.IOException;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) throws IOException {
Socket socket=new Socket("127.0.0.1",8888);
System.out.println("客户端连接到了服务器。。。");
}
}
布局&运行结果:
② 服务器向客户端回写数据—客户端接受&客户端向服务器回写数据—服务端接受—代码:
TcpServer :
package com.test2;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServer {
public static void main(String[] args) {
//定义服务器Socket对象(通信对象)
ServerSocket serverSocket=null;
//读取流
BufferedReader br = null;
//写出流
PrintWriter pw = null;
try {
//监听端口
serverSocket = new ServerSocket(8888);
System.out.println("服务器启动了....");
//等待客户端连接,如果客户端有连接过来,会生成一个Socket对象,用于与客户端通信
Socket socket = serverSocket.accept();
System.out.println("客户端连接过来了....");
//通过Socket对象,获取输入流
//缓冲字符输入流,用于读取客户端输入的信息
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//读取客户端传过来的信息
String msg = br.readLine();
System.out.println("客户端:"+msg);
//通过Socket对象,获取输出流
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
//bw.write("asdfasdf\n"); //输出信息加\n之后,信息才会发送出去
pw = new PrintWriter(socket.getOutputStream());
//向客户端输出信息
pw.println("客户端你好!");
//清空缓冲区
pw.flush();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(pw!=null){
pw.close();
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(serverSocket!=null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
TcpClient :
package com.test2;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class TcpClient {
public static void main(String[] args) {
Socket socket = null;
PrintWriter pw =null;
BufferedReader br = null;
try {
//创建Socket对象连接服务器
socket = new Socket("127.0.0.1",8888);
System.out.println("客户端连上了服务器.....");
//创建输出流,用于向服务器输出信息
pw = new PrintWriter(socket.getOutputStream());
//向服务器发送信息
pw.println("服务器你好,我是客户端...");
pw.flush();
//创建输入流,用户获取服务器传入的信息
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//获取服务器的信息
String msg = br.readLine();
System.out.println("服务器:"+msg);
} catch (IOException e) {
e.printStackTrace();
}finally {
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(pw!=null){
pw.close();
}
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
布局&运行结果:
③ 客户端服务器端循环交互—代码:
TcpServer :
package com.test3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class TcpServer {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//定义服务器Socket对象(通信对象)
ServerSocket serverSocket=null;
//读取流
BufferedReader br = null;
//写出流
PrintWriter pw = null;
try {
//监听端口
serverSocket = new ServerSocket(8888);
System.out.println("服务器启动了....");
//等待客户端连接,如果客户端有连接过来,会生成一个Socket对象,用于与客户端通信
Socket socket = serverSocket.accept();
System.out.println("客户端连接过来了....");
//通过Socket对象,获取输入流
//缓冲字符输入流,用于读取客户端输入的信息
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//通过Socket对象,获取输出流
//BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outputStream));
//bw.write("asdfasdf\n"); //输出信息加\n之后,信息才会发送出去
pw = new PrintWriter(socket.getOutputStream());
while (true){
//读取客户端信息
String info = br.readLine();
System.out.println("客户端:"+info);
//判断客户端是否说88
if(info.contains("886")){
System.out.println("服务器:886");
//服务器回应886
pw.println("886");
pw.flush();
break;
}
//服务器向客户端写信息
System.out.print("服务器:");
String msg = scanner.next();
pw.println(msg);
pw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(pw!=null){
pw.close();
}
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(serverSocket!=null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
TcpClient :
package com.test3;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class TcpClient {
public static void main(String[] args) {
//输入工具类
Scanner scanner = new Scanner(System.in);
Socket socket = null;
PrintWriter pw =null;
BufferedReader br = null;
try {
//创建Socket对象连接服务器
socket = new Socket("127.0.0.1",8888);
System.out.println("客户端连上了服务器.....");
//创建输出流,用于向服务器输出信息
pw = new PrintWriter(socket.getOutputStream());
//创建输入流,用户获取服务器传入的信息
br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while (true){
//客户端先向服务器输出信息
System.out.print("客户端:");
String msg = scanner.next();
//向服务器发送信息
pw.println(msg);
pw.flush();
//接收服务器信息
String info = br.readLine();
System.out.println("服务器:"+info);
if(info.contains("886")){
//客户端给服务器回应886
System.out.println("客户端:886");
pw.println("886");
pw.flush();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(br!=null){
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(pw!=null){
pw.close();
}
if(socket!=null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
布局&运行结果:
④ 代码:
MyTomcat :
package com.test4;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class MyTomcat {
public static void main(String[] args) throws IOException {
ServerSocket tomcatServer = new ServerSocket(8080);
System.out.println("tomcat 启动了.....");
Socket socket = tomcatServer.accept();
System.out.println("客户端来请求了......");
socket.getInputStream();
}
}
布局&运行结果:
UDP:
①(简单案例)接受方—发送方—代码:
UdpRecv :
package com.test5;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
/**
* 接收方
*/
public class UdpRecv {
public static void main(String[] args) throws IOException {
//定义socket对象,监听端口,接收数据
DatagramSocket dsRecv = new DatagramSocket(4141);
System.out.println("接收方启动了,等待接收数据...");
//创建数据报文对象,用于接收对方数据
byte[] bs = new byte[1024];
DatagramPacket dp = new DatagramPacket(bs,bs.length);
//使用socket接收数据
dsRecv.receive(dp);
System.out.println("lenth:"+dp.getLength());
//将接收的数据,封装为字符串
String info = new String(bs,0,dp.getLength());
System.out.println("小A:"+info);
//关闭网络对象
dsRecv.close();
}
}
UdpSend :
package com.test5;
import java.io.IOException;
import java.net.*;
/**
* 发送方
*/
public class UdpSend {
public static void main(String[] args) throws IOException {
//创建数据报Socket对象
DatagramSocket dsSend = new DatagramSocket();
//创建要发送的信息
byte[] bs = "你好,我是小A".getBytes();
//创建要发送的数据报文对象
DatagramPacket dp = new DatagramPacket(
bs,bs.length, InetAddress.getByName("127.0.0.1"),4141
);
System.out.println("发送发准备发送数据...");
//通过socket发送数据报
dsSend.send(dp);
//关闭网络对象
dsSend.close();
}
}
布局&运行结果:
②(简单版本聊天)小明小兰循环交互—代码:
UdpXM :
package com.test6;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.util.Scanner;
/**
* 小明:发送/接收消息 4141
*/
public class UdpXM {
public static void main(String[] args) {
//发送socket
DatagramSocket dsSend=null;
//接收socket
DatagramSocket dsRecv=null;
//数据报文
DatagramPacket dp = null;
//缓冲(临时存储)字节数据
byte[] bs =null;
//消息内容
String msg = null;
Scanner scanner = new Scanner(System.in);
try {
//创建发送Socket
dsSend = new DatagramSocket();
//创建接收Socket,并绑定4141端口
dsRecv = new DatagramSocket(4141);
System.out.println("......我是小明.....");
//循环聊天
while (true){
//接收小兰消息
//构建数据报文对象,内部关联字节数组,用于存储接收到的数据
bs = new byte[1024];
dp = new DatagramPacket(bs,bs.length);
dsRecv.receive(dp);
//将接收的信息显示
msg = new String(bs,0,dp.getLength());
System.out.println("小兰:"+msg);
//如果小兰终止聊天
if(msg.contains("886")){
//System.out.println("小明:886");
bs = "886".getBytes();
dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4242);
dsSend.send(dp);
break;
}
//发送消息给小兰
System.out.print("小明:");
msg = scanner.next();
bs = msg.getBytes();
dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4242);
dsSend.send(dp);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if(dsSend!=null)
dsSend.close();
if(dsRecv!=null)
dsRecv.close();
}
}
}
UdpXL :
package com.test6;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
/**
* 小兰:发送/接收消息 4242
*/
public class UdpXL {
public static void main(String[] args) {
//接收socket
DatagramSocket dsRecv = null;
//发送socket
DatagramSocket dsSend = null;
//数据报文对象
DatagramPacket dp = null;
//字节数组
byte[] bs = null;
//消息内容
String msg = null;
//scanner
Scanner scanner = new Scanner(System.in);
try {
//创建接收socket监听端口
dsRecv = new DatagramSocket(4242);
//创建发送socket
dsSend = new DatagramSocket();
System.out.println("......我是小兰......");
while (true){
//小兰向小明发消息
System.out.print("小兰:");
msg = scanner.next();
bs = msg.getBytes();
dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4141);
dsSend.send(dp);
//小兰接收小明的消息
dp= new DatagramPacket(bs,bs.length);
dsRecv.receive(dp);
msg = new String(bs,0,dp.getLength());
System.out.println("小明:"+msg);
if(msg.contains("886")){
//System.out.println("小兰:886");
bs = "886".getBytes();
dp = new DatagramPacket(bs,bs.length, InetAddress.getByName("127.0.0.1"),4141);
dsSend.send(dp);
break;
}
}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
布局&运行结果:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118024.html