您的位置:首页 > 理论基础 > 计算机网络

基于TCP/IP协议下的Socket通信

2016-06-14 21:56 459 查看
首先,我用的软件是Netbeans,所以大家可以参考着以下代码,不需要全部复制,因为已经标注解释,希望能帮助大家!

客户端代码:

package javaapplication2; //这是同步式的方法

import java.net.*; //jar包
import java.io.*; //jar包
public class Client{ //类名
public static void main(String[]args) throws Exception /**抛出错误*/ {
Socket s =new Socket("192.168.0.30",9898);//输入Ip(随着局域网的改变,ip会改变,要输入目前的ip地址),和端口号
OutputStream os=s.getOutputStream(); //相当于一个输出管道,客户端必须要有一个接收管道(输入管道)
DataOutputStream dos=new DataOutputStream(os); //输出流
//Thread.sleep(5000);
dos.writeUTF("1!"); // 读的用dis写的用dos、向服务器发送信息dos.writeUTF("你好!我是1号机器!");
DataInputStream dis= new DataInputStream(s.getInputStream()); //输入管道
System.out.println("已经连接!"); //读取服务端发送到响应System.out.println(dis.readUTF());
dos.flush(); /**flush() 是清空,而不是刷新啊。
一般主要用在IO中,即清空缓冲区数据,
* 就是说你用读写流的时候,其实数据是先被读到了内存中,
* 然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,
* 因为还有一部分有可能会留在内存这个缓冲区中。
* 这时候如果你调用了 close()方法关闭了读写流,
* 那么这部分数据就会丢失,所以应该在关闭读写流之前先flush(),先清空数据。*/
dos.close(); //关闭dos
dis.close(); //关闭dis
s.close(); //关闭s
}

} 服务端代码:
package javaapplication2; //这是同步式的方法

import java.net.*;
import java.io.*;
public class Server { //类名
public static void main(String[] args) throws Exception/**抛出错误*/{
ServerSocket ss=new ServerSocket(6666); //定义服务器端口
System.out.println("服务器已经启动,等待连接....");
while(true) { //循环
Socket s = ss.accept(); //等待对方的连接
System.out.println("A connent");//客户端连接后输出值
DataInputStream dis= new DataInputStream(s.getInputStream()); //接收管道(输入管道)
System.out.println(dis.readUTF()); //对应客户端的dos.writeUTF("") 读的用dis写的用dos
//Thread.sleep(5000); 同样可以用在服务端,挂起5秒
OutputStream os=s.getOutputStream(); //构建输出管道
DataOutputStream dos=new DataOutputStream(os); //输出流
dos.writeUTF("欢迎连接!"); //向客户端发送的信息
System.out.println("注意先后次序"); //将会在dis.writeUTF("")输出之后“输出”
dis.close(); //关闭dis
dos.close(); //关闭dos
s.close(); //关闭s

}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: