java socket编程
2015-09-16 11:30
429 查看
对于java Socket编程而言,有两个概念,一个是ServerSocket,一个是Socket,服务端客户端通过Socket建立连接就可以通信了。首先,ServerSocket在服务器监听某端口,当发现客户端有某Socket试图连接ServerSocket时,它会accept该请求,同时在服务端建立一个Socket与之通信,这样客户端和服务端各有一个Socket。
Socket之间通信其实就是客户端往Socket的输出流写内容,服务端就可以从输出流里读取对应内容。而且Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。不多说,上例子:
服务端:
public class Server {
public static void main(String args[]) throws IOException {
int port = 8090;
//定义一个ServerSocket监听在端口8090上
ServerSocket server = new ServerSocket(port);
//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的,服务端没接收到客户端发送的信息,就会一直监听,除非关闭输出流
Socket socket = server.accept();
//获取socket的InputStream,并从中读取客户端发过来的信息了。
Reader reader = new InputStreamReader(socket.getInputStream());
char chars[] = new char[64];
int len;
StringBuilder sb = new StringBuilder();
while ((len=reader.read(chars)) != -1) {
sb.append(new String(chars, 0, len));
}
System.out.println("from client: " + sb);
reader.close();
socket.close();
server.close();
}
}
客户端:
public class Client {
public static void main(String args[]) throws Exception {
String host = "127.0.0.1"; // 要连接的服务端IP地址
int port = 8090; // 要连接的服务端对应的监听端口
// 与服务端建立连接
Socket client = new Socket(host, port);
// 建立连接后就可以往服务端写数据了
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("我是中国人,我爱自己的祖国");
writer.flush();// 写完后要记得flush
writer.close();
client.close();
}
}
服务启动后,客户端运行服务端console窗口便会打印客户端发送的消息:
from client: 我是中国人!
Socket之间通信其实就是客户端往Socket的输出流写内容,服务端就可以从输出流里读取对应内容。而且Socket与Socket之间是双向连通的,所以客户端也可以往对应的Socket输出流里面写东西,然后服务端对应的Socket的输入流就可以读出对应的内容。不多说,上例子:
服务端:
public class Server {
public static void main(String args[]) throws IOException {
int port = 8090;
//定义一个ServerSocket监听在端口8090上
ServerSocket server = new ServerSocket(port);
//server尝试接收其他Socket的连接请求,server的accept方法是阻塞式的,服务端没接收到客户端发送的信息,就会一直监听,除非关闭输出流
Socket socket = server.accept();
//获取socket的InputStream,并从中读取客户端发过来的信息了。
Reader reader = new InputStreamReader(socket.getInputStream());
char chars[] = new char[64];
int len;
StringBuilder sb = new StringBuilder();
while ((len=reader.read(chars)) != -1) {
sb.append(new String(chars, 0, len));
}
System.out.println("from client: " + sb);
reader.close();
socket.close();
server.close();
}
}
客户端:
public class Client {
public static void main(String args[]) throws Exception {
String host = "127.0.0.1"; // 要连接的服务端IP地址
int port = 8090; // 要连接的服务端对应的监听端口
// 与服务端建立连接
Socket client = new Socket(host, port);
// 建立连接后就可以往服务端写数据了
Writer writer = new OutputStreamWriter(client.getOutputStream());
writer.write("我是中国人,我爱自己的祖国");
writer.flush();// 写完后要记得flush
writer.close();
client.close();
}
}
服务启动后,客户端运行服务端console窗口便会打印客户端发送的消息:
from client: 我是中国人!
相关文章推荐
- java 反编译 行号对齐 decompiler如何去掉行号
- spring aop术语
- Android无法导入下载好的项目(和Eclipse中已经存在的项目命名一样导致冲突)解决办法
- eclipse+Jboss配置远程调试
- Java泛型中的通配符的使用
- Eclipse快捷键
- java设计模式系列--工厂模式
- Google Java编程风格指南
- java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0错误解析
- java.util.vector中的vector的详细用法
- JAVA List 移除元素
- 详解Spring MVC 4常用的那些注解
- java中的抽象类的基本知识
- JAVA中super关键字的用法
- Maven错误信息:Missing artifact jdk.tools:jdk.tools:jar:1.6
- Java理解Map
- Java之JDBC
- RabbitMQ java Spring 开发教程
- java中date,string,timestamp,时间戳的相互转换大全
- JAVA里的String、Timestamp、Date相互转换(转)