java 发送socket给c_Java中通过TCP协议发送和接收数据-Socket编程

TCP

TCP协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。

TCP通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。

Socket

Socket可以说是一种针对网络的抽象,应用通过它可以来针对网络读写数据。根据TCP协议和UDP协议的不同,在网络编程方面就有面向两个协议的不同socket,一个是面向字节流的一个是面向报文的。

对socket的本身组成倒是比较好理解。既然是应用通过socket通信,肯定就有一个服务器端和一个客户端。所以它必然就包含有一个对应的IP地址。另外,在这个地址上server要提供一系列的服务,于是就需要有一系列对应的窗口来提供服务。所以就有一个对应的端口号(Port)。

Socket服务端

Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:

1. 构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。

2.重复如下几个步骤:

a. 调用socket的accept()方法来获得客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。

b.通过这个返回的socket实例获取InputStream和OutputStream,可以通过这两个stream来分别读和写数据。

c.结束的时候调用socket实例的close()方法关闭socket连接。

服务端示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

publicclassTestTCPSend {publicstaticvoidmain(String[]

args) {

ServerSocket serverSocket=null;

Socket socket=null;Stringmsg="hello client,I am server..";try{//构造ServerSocket实例,指定端口监听客户端的连接请求serverSocket=newServerSocket(8080);//建立跟客户端的连接socket=serverSocket.accept();//向客户端发送消息OutputStream os=socket.getOutputStream();

os.write(msg.getBytes());

InputStream is=socket.getInputStream();//接受客户端的响应byte[] b=newbyte[1024];

is.read(b);

System.out.println(newString(b));

}catch(IOException e) {

e.printStackTrace();

}finally{//操作结束,关闭sockettry{

serverSocket.close();

socket.close();

}catch(IOException e) {

e.printStackTrace();

}

}

}

}

Socket客户端

客户端的请求过程稍微有点不一样:

1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接。

2.通过Socket实例包含的InputStream和OutputStream来进行数据的读写。

3.操作结束后调用socket实例的close方法,关闭。

服务端示例代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

publicclassTestTCPReceive {publicstaticvoidmain(String[]

args) {

Socket socket=null;try{//对服务端发起连接请求socket=newSocket("localhost",8080);//接受服务端消息并打印InputStream is=socket.getInputStream();byteb[]=newbyte[1024];

is.read(b);

System.out.println(newString(b));//给服务端发送响应信息OutputStream os=socket.getOutputStream();

os.write("yes,I have received you message!".getBytes());

}catch(IOException e) {// TODO Auto-generated catch blocke.printStackTrace();

}

}

}

运行测试:

先运行服务端代码,之后运行客户端。

之后可以分别在客户端和服务端看到对应的消息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值