所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 
  Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。 
  下面给出一个最简单的Socket通信的例子供初学者参考: 
服务器端:ServerDemo.java

public class ServerDemo {
/**
* 注意:Socket的发送与接收是需要同步进行的,即客户端发送一条信息,服务器必需先接收这条信息,
* 而后才可以向客户端发送信息,否则将会有运行时出错。
* @param args
*/
public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(8888);
//服务器接收到客户端的数据后,创建与此客户端对话的Socket
Socket socket = ss.accept();
//用于向客户端发送数据的输出流
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//用于接收客户端发来的数据的输入流
DataInputStream dis = new DataInputStream(socket.getInputStream());
System.out.println("服务器接收到客户端的连接请求:" + dis.readUTF());
//服务器向客户端发送连接成功确认信息
dos.writeUTF("接受连接请求,连接成功!");
//不需要继续使用此连接时,关闭连接
socket.close();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

客户端:ClientDemo.java

public class ClientDemo {
/**
* @param args
*/
public static void main(String[] args) {
Socket socket = null;
try {
socket = new Socket("localhost",8888);
//获取输出流,用于客户端向服务器端发送数据
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//获取输入流,用于接收服务器端发送来的数据
DataInputStream dis = new DataInputStream(socket.getInputStream());
//客户端向服务器端发送数据
dos.writeUTF("我是客户端,请求连接!");
//打印出从服务器端接收到的数据
System.out.println(dis.readUTF());
//不需要继续使用此连接时,记得关闭哦
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}

最新文章

  1. ASP.NET Core 中文文档 第四章 MVC(2.3)格式化响应数据
  2. C和指针 第三章 变量的储存类型 auto、static、register以及static关键词
  3. docker push到本地仓库失败
  4. File缓存
  5. Libgdx 开发指南——目录
  6. Oracle连接出现TNS:no listener或者ORA-12514: TNS:listener does not currently know
  7. php大力力 [001节]2015-08-21.php在百度文库的几个基础教程新手上路日记 大力力php 大力同学 2015-08-21 15:28
  8. Android SDK下载和更新失败的解决方法!!!
  9. Visual Studio 2008快捷键
  10. IOS打包相关问题
  11. 省市联动_简单的Demo,适用于各种二级菜单联动
  12. VMware Converter Standalone支持Unix系统吗?
  13. (2)HomeAssistant 参数配置
  14. Singer 学习十三 发现模式
  15. Charles 网络抓包工具
  16. 【JXOI2018】排序问题 贪心
  17. ASM_Oracle ASM的概念(概念)
  18. Ini操作类
  19. 如何实现UI层的松耦合
  20. 解决方法:配置群集时# gem install redis 报错:Unable to require openssl, install OpenSSL and rebuild ruby

热门文章

  1. 【BZOJ3209】花神的数论题(数位DP)
  2. 使用Scanner类获取键盘输入的会员卡号,并将该数据存储在变量中,输出这个变量的信息
  3. React后台管理系统-登录页面
  4. 用@vue/cli发布npm包
  5. es6中的类及es5类的实现
  6. JS控制台的使用
  7. 设计模式基础--Java接口和抽象类
  8. MySql学习笔记02
  9. crontab -e 和/etc/crontab的区别
  10. 02 python网络爬虫《Http和Https协议》