这里简单的总结一下TCP和UDP编程的写法,另外涉及到HttpUrlConnection的用法 。

TCP套接字

一、项目的流程如下说明:

、客户输入一行字符,通过其套接字发送到服务器。

、服务器从其连接的套接字中选取一行字符。

、服务器将该行字符转换成大写并通过连接的套接字返回给客户

、客户机从套接字中读取修改后的行,将其打印。

二、客户端的代码如下:

public class TCPClient {
public static void main(String[] args) throws Exception {
String sentence;
String modifiedSentence;
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket("localhost", 9999);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + "\n");
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}

三、服务器的代码如下:

public class TCPServer {
public static void main(String[] args) throws Exception {
String clientSentence;
String capitalzedSentence;
ServerSocket serverSocket = new ServerSocket(9999);
while (true) {
Socket connectionSocket = serverSocket.accept();
BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
capitalzedSentence = clientSentence.toUpperCase() + "\n";
outToClient.writeBytes(capitalzedSentence);
}
}
}

四、运行的效果如下:

UDP套接字

项目的流程和上述的一样,这里不再赘述。

一、UDP客户端的代码:

public class UDPClient {
public static void main(String[] args) throws Exception {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
DatagramSocket clientSocket = new DatagramSocket();
InetAddress IPAddress = InetAddress.getByName("localhost");
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String sentence = inFromUser.readLine();
sendData = sentence.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9999);
clientSocket.send(sendPacket); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String modifiedSentence = new String(receivePacket.getData());
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}

二、UDP服务器的代码:

public class UDPServer {
public static void main(String[] args) throws Exception {
DatagramSocket serverSocket = new DatagramSocket(9999);
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
while (true) {
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
String sentence = new String(receivePacket.getData()); InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
String capitalizedSentence = sentence.toLowerCase();
sendData = capitalizedSentence.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}

和TCP不同的是,UDP可以先运行客户端,然后再运行服务器。这是因为当你执行客户端时,客户端进程并没有试图和服务器发起连接。

URLConnection的使用

一、从urlconnection中读取数据:

public class ReadFromUrlConn {
public static void main(String[] args) throws Exception {
URL url = new URL("https://www.baidu.com/");
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
System.out.println(inputLine);
in.close();
}
}

二、HttpURLConnection的post请求数据

public void login() {
HttpURLConnection httpURLConnection = null;
InputStream inputStream = null;
DataOutputStream out = null;
try {
URL url = new URL("http://localhost:9999/CsiiLearn/request/postTest.action");
httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST"); // 大小写是有区别的
httpURLConnection.setConnectTimeout(8000);
httpURLConnection.setReadTimeout(8000);
httpURLConnection.setDoOutput(true); // 这个需要在getOutputStream之前调用
out = new DataOutputStream(httpURLConnection.getOutputStream());
String params = "username=huxh&password=123456"; // post方法的请求参数
out.writeBytes(params); inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
String line = "";
while ((line = bufferedReader.readLine()) != null) {
stringBuilder.append(line);
}
System.out.println("response: " + stringBuilder.toString());
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
inputStream.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

一个多线程的例子

一、客户端的代码,请求得到一个随机产生的字符串

public class MainClient {
public static void main(String[] args) {
try {
Socket socket = new Socket("localhost", 9999);
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String line = inFromServer.readLine();
System.out.println(line);
} catch (IOException e) {
e.printStackTrace();
}
}
}

二、服务器的代码,服务于客户端的请求

public class MainServer {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(9999);
ExecutorService executorService = Executors.newFixedThreadPool(10);
while (true) {
Socket socket = serverSocket.accept();
System.out.println("request has accept");
executorService.execute(new MulitpleThread(socket));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

三、服务器开启的服务线程

public class MulitpleThread implements Runnable {
private Socket socket; MulitpleThread(Socket socket) {
this.socket = socket;
} @Override
public void run() {
try {
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
out.writeBytes("L。 " + new Random().nextInt(10));
socket.close(); // 这个是需要的,要不然客户端没有得到数据。
} catch (Exception e) {
e.printStackTrace();
}
}
}

友情链接

java基础----->TCP和UDP套接字编程的更多相关文章

  1. 【Python网络编程】利用Python进行TCP、UDP套接字编程

    之前实现了Java版本的TCP和UDP套接字编程的例子,于是决定结合Python的学习做一个Python版本的套接字编程实验. 流程如下: 1.一台客户机从其标准输入(键盘)读入一行字符,并通过其套接 ...

  2. TCP和UDP套接字编程 (java实现)

    在了解网络编程之前,我们先了解一下什么叫套接字 套接字即指同一台主机内应用层和运输层之间的接口 由于这个套接字是建立在网络上建立网络应用的可编程接口 因此也将套接字称为应用程序和网络之间的应用程序编程 ...

  3. 利用Python进行TCP、UDP套接字编程

    参考:http://www.cnblogs.com/whatbeg/p/5155524.html http://www.cnblogs.com/nzyjlr/p/4236287.html

  4. JavaTCP和UDP套接字编程

    在我们刚开始入门Java后端的时候可能你会觉得有点复杂,包含了很多杂七杂八的知识,例如文件上传下载,监听器,JDBC,请求重定向,请求转发等等(当然也没有很多),但是我们自己真正的去开发一个小型网站( ...

  5. 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  6. 【转】 探索UDP套接字编程

    UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务, ...

  7. 网络编程之TCP三次握手与四次挥手、基于TCP协议的套接字编程

    目录 TCP三次握手和四次挥手 背景描述 常用的熟知端口号 TCP概述 TCP连接的建立(三次握手) TCP四次挥手 如果已建立连接,客户端突然断开,会怎么办呢? 基于TCP协议的套接字编程 什么是S ...

  8. 《Unix 网络编程》08:基本UDP套接字编程

    基本UDP套接字编程 系列文章导航:<Unix 网络编程>笔记 UDP 概述 流程图 recvfrom 和 sendto #include <sys/socket.h> ssi ...

  9. 计算机网络实验 UDP套接字编程

    这是个傻瓜式操作教程 西科大计算机网络实验 UDP套接字编程 我用自己的Ubuntu16.04来举例,实验室的是虚拟机,差不多 只针对第三个题目,修改服务器来通过响应客户端发送的GetTime并发送给 ...

随机推荐

  1. 奇妙的go语言(面向对象)

    [ 声明:版权全部.欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 有过C++语言学习经历的朋友都知道.面向对象主要包含了三个基本特征:封装.继承和多态.封装,就 ...

  2. linux(CentOS7)安装cuda

    感谢朋友支持本博客,欢迎共同探讨交流,因为能力和时间有限,错误之处在所难免.欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...

  3. svg 添加超链接

    <svg>    <a xlink:href="http://www.w3.org//Graphics//SVG//Overview.htm8">      ...

  4. e662. 取的图像的色彩模型

    // This method returns the color model of an image public static ColorModel getColorModel(Image imag ...

  5. Floyd算法思想

    关键词:代数.图论.矩阵.松弛技术.动态规划 Floyd算法是一个经典的动态规划算法.用通俗的语言来描述的话,首先我们的目标是寻找从点i到点j的最短路径.从动态规划的角度看问题,我们需要为这个目标重新 ...

  6. linux gzip 命令详解

    减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间.gzip是在Linux系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用. 语法:gzip  ...

  7. Fastqc 能够识别的碱基编码格式

    Fastqc 能够自动识别序列的碱基编码格式,我查看一下源代码,发现是碱基编码格式一共分为 1)sanger/illumina 1.9 2) illumina 1.3 3) illumina 1.5 ...

  8. Hibernate学习(2):添加demo

  9. Java Error: java.lang.UnsupportedClassVersionError: ...bad major version at offset=6

    问题分析 报这个错误是指你的jar包或者class 的被编译的jdk版本比当前runtime的jdk版本高. 首先,确定你当前的运行版本: Java代码   Java -version java ve ...

  10. JavaScript ES2015

    <button>一</button> <button>二</button> <button>三</button> <but ...