Java的TCP网络编程
服务端代码:
package socket; import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket; /**
* 聊天室服务端
* @author 小明
*
*/
public class Server {
/**
* 运行在服务端的ServerSocket主要有两个作用:
* 1:向系统申请服务端口,客户端就是通过这个端口与服务端建立连接的。
* 2:监听服务端口,一旦客户端与服务端建立连接,就会
* 自动创建一个Socket,并通过该Socket与建立连接的
* 客户端进行交互。
*
*/
private ServerSocket server; public Server()
{
try{
/**
* 实例化ServerSocket的同时要指定向系统申请的服务端口。注意,该端口
* 不能与当前系统其它应用程序申请的端口号一致,
* 否则会抛出端口被占用的异常。
*/
System.out.println("正在启动服务端...");
server = new ServerSocket(8088);
System.out.println("服务端启动完毕!");
}catch(Exception e){ }
} public void start()
{
try {
System.out.println("等待客户端连接");
Socket socket = server.accept();
/**
* 准备接受客户端连接
*
* 这是一个阻塞方法。
*一旦调用accpet()方法,服务端阻塞在这里,等着客户端连接了。
*这时当我们启动客户端时,客户端实例化socket,通过IP找到应用程序。
*这时accpet()马上就会有反应。accpet()方法执行完就返回一个socket。
*通过这个socket就可以与刚建立连接的这个客户端进行通讯了。
*客户端创建一个socket,服务端通过accept()接收一个socket。
*这时候就可以进行沟通了。
* 需要处理异常。
*/
InputStream in = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(in);
BufferedReader br = new BufferedReader(isr);
String message = br.readLine();
System.out.println("客户端说:" + message); System.out.println("一个客户端连接了");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } public static void main(String[] args) {
Server server = new Server();
server.start();
} }
需要先启动服务器端,客户端才启动。
服务端运行后,accept()方法hi引起程序的阻塞。
客户端代码:
package socket; import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException; /**
* 聊天室客户端
* @author 小明
*
*/
public class Client {
/**
* 套接字
* 封装了TCP协议的通信细节,让我们可以简单地使用它完成TCP通讯
* Socket连接后提供了两条流,通过两条流的读写操作完成与远端计算机的数据连接
* 完成与远端计算机的数据交换。
*/
private Socket socket;
/**
* 用来初始化客户端
*/
public Client()
{
try {
/**
* 实例化Socket时需要传入两个参数:
* 1:服务端的IP地址
* 2:服务端的端口号
* 通过IP地址可以找到服务端所在的计算机
* 通过端口可以找到运行在服务端计算机上的
* 服务端应用程序
* 注意,实例化Socket的过程就是连接的过程,若
* 连接失败就会抛出异常。
*/
System.out.println("正在连接服务端...");
socket = new Socket("localhost", 8088);
System.out.println("与服务端建立连接!"); /**
* 有两个参数,一个是IP地址,一个是端口号
*/
/**
* 所有应用程序在使用网络的时候都要和操作系统申请一个网络端口
*
*/
/**
* 异常要我们自己进行处理,不要抛出
*/
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } /**
* 写程序时不要过度依赖main方法
* 客户端开始工作的方法
*/
public void start()
{
try{
//socket.getOutputStream();
PrintWriter pw = new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
//pw.write("你好服务端");
//使用上面这条语句是错的,要使用具有自动行刷新的方法
//不要再下意识地写上面那条语句了
pw.println("你好服务端!");
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
Client client = new Client(); client.start(); }
}
建立第二个服务端时,发信息给服务端时没有反应。
因为只调用了一次accept()方法,所以接收不到信息。
Java的TCP网络编程的更多相关文章
- JAVA TCP网络编程学习笔记
一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...
- Java - TCP网络编程
Java - TCP网络编程 Server 逻辑思路: 创建ServerSocket(port),然后服务器的socket就启动了 循环中调用accept(),此方法会堵塞程序,直到发现用户请求,返回 ...
- Java之HTTP网络编程(一):TCP/SSL网页下载
目录 一.简介:HTTP程序设计 1.HTTP系统设计 2.HTTP客户端工作过程 3.HTTP服务端工作过程 二.基于TCP Socket的HTTP网页下载 三.基于SSL Socket的HTTPS ...
- Java学习之网络编程实例
转自:http://www.cnblogs.com/springcsc/archive/2009/12/03/1616413.html 多谢分享 网络编程 网络编程对于很多的初学者来说,都是很向往的一 ...
- 黑马程序员:Java基础总结----网络编程
黑马程序员:Java基础总结 网络编程 ASP.Net+Android+IO开发 . .Net培训 .期待与您交流! 网络编程 网络通讯要素 . IP地址 . 网络中设备的标识 . 不易记忆,可用 ...
- Java进阶之网络编程
网络编程 网络编程对于很多的初学者来说,都是很向往的一种编程技能,但是很多的初学者却因为很长一段时间无法进入网络编程的大门而放弃了对于该部分技术的学习. 在 学习网络编程以前,很多初学者可能觉得网络编 ...
- 第84节:Java中的网络编程(中)
第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...
- 第78节:Java中的网络编程(上)
第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...
- 第62节:探索Java中的网络编程技术
前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...
随机推荐
- python实现测试中常用的脚本(待完善)
一. Python操作MySQL数据库,简单的增删改查 # coding=utf-8 ''' Created on 2015年5月12日 @author: Administrator ''' impo ...
- [ERROR] Error generating R.java from manifest
把*.js文件用记事本打开,再保存为utf-8的编码覆盖,把build文件夹的文件删掉,启动.可以运行了.(在这之前试过把jdk的几个文件考到平台工具下的动作)
- [译]NeHe教程 - 创建一个OpenGL窗体
原文: Setting Up An OpenGL Window 欢迎阅读我的OpenGL教程.我是一个热爱OpenGL的普通码农!我第一次听到OpenGL是在3Dfx刚发布他们给Voodoo I显卡的 ...
- Spigot 算法之中的一个 计算调和级数的和
我是首先在[1] 注意到 Spigot-Algorithm的,这个算法公布的相当早.见[2]. [1] 给出几个令人惊异的程序.仅仅用非常少的代码就能够计算e,pi,log(2)等常数. 当中 ...
- hdu - 5033 - Building(单调栈)
题意:N 幢楼排成一列(1<=N<=10^5),各楼有横坐标 xi(1<=xi<=10^7) 以及高度 hi(1<=hi<=10^7),在各楼之间的Q个位置(1&l ...
- 安装Struts2 类库
现在,如果一切正常,那么你可以继续设置您的Struts 2框架.以下是简单的步骤,下载并安装在机器上Struts2. 请选择是否要安装Hibernate在Windows或Unix,然后继续进行下一个步 ...
- 微信小程序的官方文档
虽然不知道微信小程序今后的发展情况,不过做为一名it人员的我还是去了解它. 这是他的文档路径,里面有详细的使用和申请内测号的全部流程,这里就不再过多解释了. 看后那个开发小程序的文档记得分析你感觉微信 ...
- Eclipse搭建C++开发环境
http://jingyan.baidu.com/article/456c463b67b4310a59314468.html
- j2EE的web.xml详解
https://blog.csdn.net/changqing5818/article/details/49928231 https://www.cnblogs.com/ClassNotFoundEx ...
- Django 事务
Django事务 事务是通过将一组相关操作组合为一个,要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠.事务具有4个特性:原子性.一致性.隔离性.持久性. 默认情况下,在Djang ...