JAVA SOCKET的2种实现
来源:互联网 发布:人工智能 第三版 pdf 编辑:程序博客网 时间:2024/05/16 13:57
<!-- /* Font Definitions */ @font-face{font-family:Wingdings;panose-1:5 0 0 0 0 0 0 0 0 0;mso-font-charset:2;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:0 268435456 0 0 -2147483648 0;}@font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm;mso-pagination:none;mso-layout-grid-align:none;text-autospace:none;font-size:10.5pt;mso-bidi-font-size:10.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;}p.MsoHeader, li.MsoHeader, div.MsoHeader{margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm;text-align:center;mso-pagination:none;tab-stops:center 207.65pt right 415.3pt;layout-grid-mode:char;mso-layout-grid-align:none;text-autospace:none;border:none;mso-border-bottom-alt:solid windowtext .75pt;padding:0cm;mso-padding-alt:0cm 0cm 1.0pt 0cm;font-size:9.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;}p.MsoFooter, li.MsoFooter, div.MsoFooter{margin-top:0cm;margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm;mso-pagination:none;tab-stops:center 207.65pt right 415.3pt;layout-grid-mode:char;mso-layout-grid-align:none;text-autospace:none;font-size:9.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;} /* List Definitions */ @list l0{mso-list-id:166480649;mso-list-type:hybrid;mso-list-template-ids:775840906 942051372 67698689 67698703 658045874 67698713 67698715 67698703 67698713 67698715;}@list l0:level1{mso-level-number-format:chinese-counting-thousand;mso-level-text:%1、;mso-level-tab-stop:21.0pt;mso-level-number-position:left;margin-left:21.0pt;text-indent:-21.0pt;mso-ansi-language:EN-US;}@list l0:level2{mso-level-number-format:bullet;mso-level-text:;mso-level-tab-stop:42.0pt;mso-level-number-position:left;margin-left:42.0pt;text-indent:-21.0pt;font-family:Wingdings;mso-ansi-language:EN-US;}@list l0:level3{mso-level-tab-stop:108.0pt;mso-level-number-position:left;text-indent:-18.0pt;}@list l0:level4{mso-level-tab-stop:81.0pt;mso-level-number-position:left;margin-left:81.0pt;text-indent:-18.0pt;mso-ansi-language:EN-US;}@list l0:level5{mso-level-tab-stop:180.0pt;mso-level-number-position:left;text-indent:-18.0pt;}@list l0:level6{mso-level-tab-stop:216.0pt;mso-level-number-position:left;text-indent:-18.0pt;}@list l0:level7{mso-level-tab-stop:252.0pt;mso-level-number-position:left;text-indent:-18.0pt;}@list l0:level8{mso-level-tab-stop:288.0pt;mso-level-number-position:left;text-indent:-18.0pt;}@list l0:level9{mso-level-tab-stop:324.0pt;mso-level-number-position:left;text-indent:-18.0pt;}@list l1{mso-list-id:1037196937;mso-list-type:hybrid;mso-list-template-ids:-645251058 658045874 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}@list l1:level1{mso-level-tab-stop:81.0pt;mso-level-number-position:left;margin-left:81.0pt;text-indent:-18.0pt;mso-ansi-language:EN-US;}ol{margin-bottom:0cm;}ul{margin-bottom:0cm;}-->
JAVA SOCKET的2种实现
一、 TCP实现
Java Socket编程TCP实现,比较容易懂。
服务端代码
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
public class ServerSocket {
public static void main(String[]args) {
beginSocket();
}
public static void beginSocket(){
try {
java.net.ServerSocketserverSocket=new java.net.ServerSocket(3456);
InetAddress inta=serverSocket.getInetAddress().getLocalHost();
System.out.println(inta.getHostAddress());
while(true){
Socket socket=serverSocket.accept();
new HelloMessage(socket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
//为了提高并发时的处理效率,对于每个请求,系统都新建一个线程处理。
Java代码
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class HelloMessage extendsThread {
private Socket socket_ = null;
public HelloMessage(Socket socket) {
this.socket_ = socket;
this.start();
}
public void run() {
try {
BufferedReader bReader = newBufferedReader(new InputStreamReader(
this.socket_.getInputStream()));
PrintWriter pWriter = newPrintWriter(this.socket_
.getOutputStream());
String requestStr =bReader.readLine();
if (requestStr != null &&!"".equals(requestStr)) {
if(requestStr.equals("java")) {
pWriter.println("your write isjava");
}
if(requestStr.equals(".net")) {
pWriter.println("your write is.net");
}
if(requestStr.equals("php")) {
pWriter.println("your write isphp");
}
if(requestStr.equals("end")) {
pWriter.println("your write isend");
}else{
pWriter.println("your write isother");
}
}else{
pWriter.println("your write isnull");
}
pWriter.flush();
pWriter.close();
bReader.close();
this.socket_.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
客户端代码
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class ClientSocket {
public static void main(String[]args) {
clientRequest();
}
private static void clientRequest() {
try {
while (true) {
Socket clientSocket = newSocket("172.168.4.105", 3456);
BufferedReader bReader = newBufferedReader(new InputStreamReader(
System.in));
System.out.println("please inputjava or .net or php or end");
String strLine = bReader.readLine();
if (strLine != null &&!"".equals(strLine)) {
PrintWriter pWriter = newPrintWriter(clientSocket
.getOutputStream(), true);
pWriter.println(strLine);
BufferedReader br = newBufferedReader(
newInputStreamReader(clientSocket.getInputStream()));
String strResult = br.readLine();
System.out.println(strResult);
pWriter.flush();
pWriter.close();
clientSocket.close();
}
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
这样一个简单的TCP,Socket编程的原型就成了。简单介绍下:
几个比较重要的API
.Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。
.getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。
.getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。
二、 UDP实现
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPReceive {
public static void main(String[] args) {
Integer port = 2345;
byte[] buffer = new byte[2048];
try {
DatagramSocket datagramSocket = newDatagramSocket(port);
DatagramPacket datagramPacket = newDatagramPacket(buffer,buffer.length);
try {
for (;;) {
System.out.println("begin receivedata....");
datagramSocket.receive(datagramPacket);
System.out.println(datagramPacket.getAddress().getAddress().toString()+"======="
+new String(datagramPacket.getData()));
datagramPacket.setLength(datagramPacket.getData().toString().length());
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}
客户端代码
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
public class UDPSend {
public static void main(String[] args) {
try {
for (;;) {
DatagramSocket sendSocket = newDatagramSocket();
DatagramPacket dataPack = new DatagramPacket(
"hello ,welcome to studyjava..".getBytes(),
"hello ,welcome to studyjava..".length(), InetAddress
.getByName("127.0.0.1"), new Integer(2345));
try {
sendSocket.send(dataPack);
sendSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (SocketException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}
三、 比较
UDP:
1. 每个数据报文中都给出了完整的地址信息,因此无需建立接收方和发送方的连接。
2. UDP传输有大小限制,每个传输的数据报文必须在64KB之内。
3. UDP是一个不可靠协议,数据报文并不一定按照顺序到达接收方。
TCP:
1. 需要建立连接,所以建立连接需要时间。
2. 建立连接之后,双发就可以按照统一的格式传输大的数据。
3. TCP是一个可靠协议,接收方可以完全正确的获取发送方所发送的所有数据。
四、 应用
UDP:
UDP操作简单,很少需要监护,通常用于局域网高可靠性的分散系统,例如视频会议,并不需要视频数据的绝对正确,只需要连贯就可以了。这时使用UDP更合理一些。
TCP:
TCP在网络通信上很出色,例如Telnet和FTP都需要不定长的数据被完整的传输,但是可靠传输是要付出代价的,它会占用计算机处理时间和网络带宽。因此,tcp的传输效率并不比UDP高。
- JAVA SOCKET的2种实现
- java实现socket的编程
- java socket实现文件的发送接收
- Java实现简单的socket通信
- java实现多线程的socket通信技术
- java实现简单的Socket通信
- 浅述JAVA Socket的简单实例实现
- Socket分片:基于Netty的Java实现
- Java:基于socket的聊天实现+文件传输
- Socket分片:基于Netty的Java实现
- java简单Socket聊天室程序的实现
- Java实现Socket的TCP传输实例
- java--实现简单的socket通信
- 关于Socket的使用以及java实现
- Java Socket实现简单的即时通信
- java多线程socket实现简单的聊天
- java实现socket文件传输
- java实现socket文件传输
- flex中的bufer
- 自己动手编写嵌入式Bootloader之(2)
- 硬件总线接口系列-I2C
- python gtk入门
- brief introduction to the project
- JAVA SOCKET的2种实现
- Qt WebKit 可以做什么?(一)——认识Qt webkit
- MyEclipse8.5 菜单栏的help中找不到Software Updates
- Qt Webkit可以做什么(二)——显示网页&获取网络服务
- C语言中的bool
- ORACLE中对LONG类型进行处理的方法
- An example code
- 如何禁止调整自定义控件的尺寸?
- Jabberd2源代码分析:pool