黑马程序员技术交流社区
标题:
java网络编程笔记
[打印本页]
作者:
冯超
时间:
2013-9-4 00:54
标题:
java网络编程笔记
本帖最后由 冯超 于 2013-9-5 23:08 编辑
java网络编程
两台电脑能进行通信,为什么能了?
1.通过ip地址找到对方主机;
2.通过端口(port)找到对方使用的应用程序;
4.应用程序一间通过协议如:TCP/IP
端口一般是0~~65535;但是0~~1024一般被系统端口所占有。
socket通信在传输层。
一:重点类InetAddress一般是查找Ip的类
例如:InetAddress.
getLocalHost
()获取主机名和Ip地址.
关于传送协议的介绍:
java中的网络传输方式分为UDP与TCP,他们各自的特点如下:
UDP:
<1>讲数据源和目的源封装在数据包中,不需要连接。
<2>每个数据限制在64K内
<3>不需要连接,速度快。
用于:聊天,视频会议等。
TCP:
<1>需要连接
<2>可以进行大数据传输
<3>很安全。
缺点:UDP容易造成数据丢失,TCP传输的很慢。
二:重点类DatagramSocket与DatagramPacket类。
关于UDP之间的socket通信
例如:DatagramSocket关于接受与发送数据。DatagramPacket关于数据打包及对于数据的获取。
以下为实例代码:
发送端:
package udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Udpsend {
public static void main(String[] args) {
//1.建立DatagramSocket通信
try {
//1.建立DatagramSocket通信
DatagramSocket ds = new DatagramSocket();
//2.提供数据
byte[] buf = "feng chao hello !".getBytes();
//3.发送数据(数据,地址,端口号)
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getLocalHost(),
5512);
ds.send(dp);
//4.关闭资源
ds.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
复制代码
接收端:
package udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Udpreceive {
public static void main(String[] args) throws IOException {
//1定义UDP socket服务
DatagramSocket ds = new DatagramSocket(5512);
//定义一个数据进行存储
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
//socket接受
ds.receive(dp);
//关闭资源
//获取数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(), 0, dp.getLength());
int port = dp.getPort();
System.out.println("ip :" + ip);
System.out.println("data :" + data);
System.out.println("port :" + port);
ds.close();
}
}
复制代码
UDP之间的socket通信
需要对数据进行打包在发送
二:重点类ServerSocket与Socket类。
关于TCP之间的socket通信
例如:
ServerSocket
可以
接受Socket他是服务端。Socket关于获取OutputStream和InputStream。
实例代码:
客户端:
package tcp;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
public class TcpClient {
/**
* @param args
*/
public static void main(String[] args) {
try {
Socket socket = new Socket(InetAddress.getByName("KMNFCDZKTTHPEI8"), 1000);
OutputStream out = socket.getOutputStream();
String data = "hello wa ka yi";
out.write(data.getBytes());
socket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
复制代码
服务端:
package tcp;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpServe {
public static void main(String[] args) {
// TODO Auto-generated method stub
//1创建服务端
try {
//1创建服务端
ServerSocket server = new ServerSocket(1000);
//2接受客户端的服务
Socket socket = server.accept();
InputStream in = socket.getInputStream();
//得到数据
String ip = socket.getInetAddress().getHostAddress();
byte[] b= new byte[1024];
int n = in.read(b);
String data = new String(b, 0, n); //疑问如何解决byte数组中没有数据的问题
System.out.println(ip + ":" + data);
socket.close();
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
复制代码
TCP之间的socket通信
是通过i/O流之间进行通信的。
tcp_ip.jpg
(26.93 KB, 下载次数: 4)
下载附件
2013-9-4 00:48 上传
作者:
gulup
时间:
2013-9-4 02:06
支持分享,希望楼主继续补全内容。
还有帖子分类,请改成资源分享。
作者:
张歆明
时间:
2013-9-4 08:30
就这些啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2