网络开发Socket和ServerSocket
已经发表个人公众号
Socket和ServerSocket
Socket为“孔”或“插座”,创建Socket,打开连接Socket的输入或输出流,对Socket进行读写,关闭Socket。
Accept方法用于产生“阻塞”,这里有getInputStream方法和getOutInputStream方法,会产生一个IOException,
在Java.net包中,有Socket和ServerSocket两个类。以JDK1.6介绍:
构造方法
public Socket()
public Socket(String host, int port)
//host - 主机名,或者为 null,表示回送地址
//port - 端口号
public Socket(InetAddress address,int port)
//address - IP 地址
//port - 端口号
ServerSocket类有3个构造方法
ServerSocket(int port)
ServerSocket(int port,int backlog)
ServerSocket(int port,int backlog,InetAddress binAddr)
服务器与客户端通信
package two;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerSocket1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
ServerSocket ss = new ServerSocket(2007);
while(true) {
Socket s = ss.accept();
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("helloworld, i am server thinkpad");
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
System.out.println(str);
s.close();
}
}
catch(IOException ee) {
System.out.println(ee);
}
catch(Exception e) {
System.out.println(e);
}
}
}
package two;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ConnectException;
import java.net.Socket;
public class ClientSocket {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Socket s = new Socket("########",2007);
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("hello , i am client");
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
System.out.println(str);
s.close();
}
catch(ConnectException eee) {
System.out.println(eee);
}
catch(IOException ee) {
System.out.println(ee);
}
catch(Exception e) {
System.out.println(e);
}
}
}
线程:
线程也称为轻量级进程,是程序执行的最小单元。是程序中一个单一的顺序控制流程,在程序中同时运行多个线程,称为多线程。进程是一个可执行的程序。一个应用可以有一个或多个进程,对于一个进程可以有一个或多个线程,其中一个是主线程,public static void main。
创建,执行线程的速度比进程更快。
多客户请求服务
public class DuoServer{
public static void main(String[] args){
boolean connected = true;
try{
ServerSocket ss = new ServerSocket(2007);
int clientnum=0;
while(connected){
ServerThread st = new ServerThread(ss.accept(),clientnum);
st.start();
clientnum++;
System.out.println(clientnum);
}
}
catch(Excepiton e){
System.out.println(e);
}
}
}
class ServerThread extends Thread{
private Socket s;
int clientnum;
public ServerThread(Socket s, int num){
this.s = s;
clientnum = num + 1;
}
public void run(){
try{
InputStream is = s.getInputStream();
OutputStream os = s.getOutputStream();
PrintStream ps = new PrintStream(os);
ps.println("i am server");
DataInputStream dis = new DataInputStream(is);
String str = dis.readLine();
System.out.println(str);
}
catch(Excepiton e){
System.out.println(e);
}
}
}
网络开发Socket和ServerSocket的更多相关文章
- 网络编程--Socket与ServerSocket
1.服务器端代码 package net; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Sock ...
- JAVA I/O(四)网络Socket和ServerSocket
<Thinking in Enterprise Java>中第一章描述了用Socket和Channel的网络编程,核心即为Socket和Channel,本文简单讲述Socket的应用. S ...
- 【网络开发】详谈socket请求Web服务器过程
最开始我们需要明白一件事情,因为这是这篇文章的前提: HTTP协议只是一个应用层协议,它底层是通过TCP进行传输数据的.因此,浏览器访问Web服务器的过程必须先有"连接建立"的发生 ...
- JAVA I/O(五)多线程网络Socket和ServerSocket
上篇文章介绍了Socket和ServerSocket简单使用和源码,服务器端会对每个客户端请求创建一个线程,为使服务器端能同时处理多个客户端请求,可以采用多线程的方式.本文仅对实例进行简单记录,如下. ...
- JAVA: Socket和ServerSocket网络编程
面是本次学习的笔记.主要分异常类型.交互原理.Socket.ServerSocket.多线程这几个方面阐述. 异常类型 在了解Socket的内容之前,先要了解一下涉及到的一些异常类型.以下四种类型都是 ...
- Android 网络编程 Socket
1.服务端开发 创建一个Java程序 public class MyServer { // 定义保存所有的Socket,与客户端建立连接得到一个Socket public static List< ...
- android 网络编程--socket tcp/ip udp http之间的关系
网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层,一般编程人员接触最多的就是应用层和运输层,再往下的就是所谓的媒体层了,不是我们研究的对象. 下面是应用层.运输层,网络 ...
- Python之网络编程Socket
Python 提供了两个级别访问的网络服务.: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法. 高级别的网络 ...
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
随机推荐
- URL不变的情况下,最实用的vue刷新当前页面,provide / inject 组合 方式实现vue页面刷新
原文:https://blog.csdn.net/Dream_xun/article/details/83024487 其他参考:https://blog.csdn.net/liyunkun888/a ...
- 【WEB基础】HTML & CSS 基础入门(2)选取工具:VS2019安装使用
前面 子曰“工欲善其事,必先利其器”.开始编写HTML代码前,我们该选择一款编辑工具,实际上,HTML作为标记语言,我们甚至可以直接用记事本来编写HTML代码,但记事本实在弱爆了.这里推荐使用Visu ...
- 2019 房多多java面试笔试题 (含面试题解析)
本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.房多多等公司offer,岗位是Java后端开发,因为发展原因最终选择去了房多多,入职一年时间了,也成为了面试官 ...
- DNS原理及劫持问题
对于互联网,人们总是高谈阔论,却很少有人愿意去了解电脑.手机.电视这些设备到底是如何被“连接”起来的.本文通过“我”,一个普通的网络请求的视角,给大家介绍下“我”的工作流程是如何的. 人们动动手指,点 ...
- JAVA基础之JSP与EL技术、JSTL技术
要牢记jsp四大作用域(pageContext域:当前jsp页面范围 request域:一次请求 session域:一次会话 application域:整个web应用)以及九大内置对 ...
- 图说jdk1.8新特性(3)--- 注解与类型推测优化
获取同一类型多个注解 jdk1.8的java.lang.Class类新增了方法getAnnotationsByType方法,该方法可以获取某一个类型的注解列表,具体代码示例如下: public c ...
- 【hadoop】hadoop3.2.0应用环境搭建与使用指南
下面列出我搭建hadoop应用环境的文章整理在一起,不定期更新,供大家参考,互相学习!!! 杂谈篇: [英语学习]Re-pick up English for learning big data (n ...
- 利用ViewStub实现布局懒惰加载
这个问题也是头条面试官问的,本身没什么难度,但以前确实没仔细研究过. 1.使用介绍 ViewStub是一种不可见的尺寸为0的View,用来实现布局资源的懒加载.当ViewStub被设置为用户可见或其 ...
- Matplotlib:mpl_toolkits.mplot3d工具包
简介 mpl_toolkits.mplot3d是Matplotlib里面专门用来画三维图的工具包,官方指南请点击此处<mplot3d tutorial> 使用 导入 使用from mpl_ ...
- 调试中行支付demo
用eclipse调试中行支付demo,本来报错. 让我同学帮我远程看了下,他删了服务器,又添加服务器,然后竟然可以运行了,牛逼! 原来报错: at java.net.URLClassLoader$1. ...