Socket编程
来源:互联网 发布:照片制作mv软件 编辑:程序博客网 时间:2024/05/29 15:46
Socket编程
Java的TCP编程
1.对TCP/IP协议的理解
TCP/IP(TransmissionControl Protocol/Internet Protocol的简写)中文译作传输控制协议/因特网互联协议,又叫网络通信协议。这个协议书Internet最基本的协议,也是Internet的基础。简单的说,它是由网络层的IP协议和传输层的TCP协议组成。确切的说,TCP/IP协议是一组包括TCP协议和IP协议,UDP协议,ICMP协议和其他的一些协议工程的。
2.TCP协议通信的特点
TCP协议是一种面向连接的,可靠的,基于字节流的运输层(Transport Layer)通信协议。在TCP/IP协议组中,TCP层位于IP层之上,应用层之下。不同的主机的应用层之间经常需要可靠的,像管道一样的连接,IP层不提供这样的流机制,而是提供不可靠的包交换。TCP层的协议就可以提供专业的一种可靠的连接。应用层向TCP层发送8位字节表示的流数据,然后TCP把数据流分割层适当长度的报文段,之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端的TCP层。TCP为了保证不发生丢包,采用一种确认机制,一旦发送失败将提供重发的机会,保证了数据的可靠传输。
3.TCP一般用于C/S模式的应用程序,存在服务器端和客户端两个部分。
对于服务器端:
import java.io.*;
import java.net.*;
public class Server {
public staticvoid main(String args[]) throws IOException {
创建一个服务器端Socket,并指定一个端口号
ServerSocket server = new ServerSocket(5678);
开始监听来自客户端的请求要求
Socket client = server.accept();
创建Socket连接成功后的输入流和输出流
BufferedReader in=new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriterout = new PrintWriter(client.getOutputStream());
System.out.println("-------Talking-------");
while(true) {
得到输入端输入的字符串
Stringstr = in.readLine();
打印到控制台上
System.out.println("Client:" + str);
将数据写到输出流上,返回到Client端
out.println(str);
情况缓存
out.flush();
if(str.equals("end"))
break;
}
in.close();
out.close();
server.close();
}
}
对于客户端:
import java.io.*;
import java.net.*;
public class Client {
public staticvoid main(String args[]) throws IOException {
创建Socket,建立与服务器端的连接
Socket socket= new Socket(InetAddress.getLocalHost(), 5678);
由Socket获得输入流,并构造字符流对象
BufferedReaderin = new BufferedReader(new InputStreamReader(socket.getInputStream()));
由Socket获得输出流,并构造PrintWriter对象
PrintWriterout = new PrintWriter(socket.getOutputStream());
创建一个输入流,构造一个字符输入流对象
BufferedReaderwt = new BufferedReader(new InputStreamReader(System.in));
System.out.println("-------Talking--------");
while (true){
由控制台输入一行字符,并得到
Stringstr = wt.readLine();
写入到Socket的输出流中
out.println(str);
清空缓存
out.flush();
if(str.equals("end"))
break;
//System.out.println(in.readLine());
}
out.close();
wt.close();
socket.close();
}
}
Java的UDP编程
1.如何理解UDP协议
UDP协议与TCP协议同处于TCP/IP协议的传输层,他们都是用于数据传输的,只不过它没有提供像TCP那样高的可靠机制。它是一个无连接的协议,传输数据之前源端和终端不建立连接,当它想传送时就去简单地抓取来自应用程序的数据,并尽快的把他们扔到网上,不需要维护连接状态,字节开销小。
Java的UDP编程模型
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class Chat{
public staticvoid main(String args[]) throws Exception{
//args format:接受端口,发送端口,对方接收端口
newReceiveThread(Integer.parseInt(args[0])).start();
new SendThread(Integer.parseInt(args[1]),Integer.parseInt(args[2])).start();
}
}
class ReceiveThread extends Thread {
privateDatagramSocket ds;
publicReceiveThread(int port){
super();
try{
this.ds = new DatagramSocket(port);
}catch(SocketExceptione){
e.printStackTrace();
}
}
public voidrun(){
try{
byte buff[] = new byte[1024];
DatagramPacket dp = new DatagramPacket(buff,1024);
while(true){
ds.receive(dp);
String str = newString(dp.getData(),0,dp.getLength());
System.out.println("receive:"+str);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
ds.close();
}
}
}
class SendThread extends Thread {
privateDatagramSocket ds;
private intsendPort;
public SendThread(int port,int sendPort){
super();
this.sendPort= sendPort;
try{
this.ds = new DatagramSocket(port);
}catch(SocketExceptione){
e.printStackTrace();
}
}
public voidrun(){
try{
BufferedReader br = new BufferedReader(newInputStreamReader(System.in));
Stringstr = null;
while((str= br.readLine())!=null){
DatagramPacket dp = newDatagramPacket(str.getBytes(),0,str.length(),InetAddress.getLocalHost(),sendPort);
ds.send(dp);
System.out.println("send:"+str);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
ds.close();
}
}
}
- socket编程--socket基本概念
- socket编程--socket基本概念
- socket编程
- socket编程
- Socket 编程
- socket编程
- Socket编程
- Socket编程
- Socket编程
- Socket编程
- SOCKET编程
- socket编程
- Socket编程
- socket编程
- Socket 编程
- Socket 编程
- socket 编程
- socket编程
- Response方法使用
- cvHoughCircles
- 雨中飘荡的回忆
- MOVSB﹑MOVSW 和 REP 指令
- Thread 常搞混的几个概念sleep、wait、yield、interrupt
- Socket编程
- cocos2d-x学习笔记——cocoa目录
- 多线程的学习笔记
- web 开发视频资源
- 实验五:利用Servlet实现登陆系统
- 想念那一池莲花
- 复习MySQL
- oracle创建表空间
- 字符串16进制转换