javase套接字编程

1、沟通多线程

 1 package com.socket;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.io.OutputStream;
 7 import java.net.InetSocketAddress;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10 import java.net.SocketAddress;
11
12 public class Communication extends Thread{
13     private Socket socket;
14     private String clientInfo;
15
16     public Communication(Socket socket) {
17         super();
18         this.socket = socket;
19         clientInfo=getClientInfo();
20     }
21     public void run(){
22         //System.out.println("有连接了");
23         InputStream is;
24         try {
25             is = socket.getInputStream();//获取输入流,读取客户端内容
26             OutputStream os = socket.getOutputStream();//获取输出,回传给客户
27             InputStreamReader isr = new InputStreamReader(is);
28             char[] buf=new char[1024];
29             int len=0;
30             while((len=isr.read(buf))!=-1){
31                 String msg=new String(buf,0,len);
32
33                 System.out.println("["+clientInfo+"]"+msg);
34                 os.write(("[from chaofei]"+msg).getBytes());
35             }
36         } catch (IOException e) {
37             // TODO Auto-generated catch block
38             e.printStackTrace();
39         }
40     }
41     //获取远程客户端信息
42     private String getClientInfo(){
43         try {
44             InetSocketAddress addr = (InetSocketAddress) socket.getRemoteSocketAddress();
45             String ip = addr.getAddress().getHostAddress();
46             int port = addr.getPort();
47             return ip+":"+port;
48         } catch (Exception e) {
49             // TODO Auto-generated catch block
50             e.printStackTrace();
51         }
52         return null;
53
54     }
55 }

2、服务器端

 1 package com.socket;
 2
 3 import java.io.IOException;
 4 import java.io.InputStream;
 5 import java.io.InputStreamReader;
 6 import java.net.ServerSocket;
 7 import java.net.Socket;
 8
 9 import org.junit.Test;
10
11 /**
12  * 只接受客户端内容,不进行回复
13  *
14  * @author feigu
15  *
16  */
17 public class MySever {
18     @Test
19     public void start() {
20         try {
21             ServerSocket ss = new ServerSocket(8888);
22             while (true) {
23
24                 Socket socket = ss.accept();// 接收客户端请求
25                 new Communication(socket).start();
26             }
27         } catch (IOException e) {
28             // TODO Auto-generated catch block
29             e.printStackTrace();
30         }
31     }
32 }

3、客户端

 1 package com.socket;
 2
 3 import java.io.BufferedReader;
 4 import java.io.IOException;
 5 import java.io.InputStream;
 6 import java.io.InputStreamReader;
 7 import java.io.OutputStream;
 8 import java.net.ServerSocket;
 9 import java.net.Socket;
10
11 import org.junit.Test;
12
13 public class MyClient {
14     @Test
15     public void send() {
16         try {
17             Socket s = new Socket("localhost", 8888);
18             OutputStream os = s.getOutputStream();
19             InputStream is = s.getInputStream();
20             BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
21             String line = null;
22             byte[] buf = new byte[1024];
23             int len = 0;
24             while ((line = br.readLine()) != null) {
25                 os.write(line.getBytes());
26                 len = is.read(buf);
27                 System.out.println(new String(buf, 0, len));
28             }
29
30         } catch (IOException e) {
31             // TODO Auto-generated catch block
32             e.printStackTrace();
33         }
34     }
35 }
时间: 2024-10-07 18:55:45

javase套接字编程的相关文章

linux网络环境下socket套接字编程(UDP文件传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux

TCP下的套接字编程

1.什么是套接字 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口.区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址.使用的传输层协议(TCP或UDP)和使用的端口号.Socket原意是"插座".通过将这3个参数结合起来,

Unix网络编程之基本TCP套接字编程(上)

TCP客户/服务器实例 服务器程序 #include "unp.h" int main(int argc, char **argv) { int listenfd, connfd; pid_t childpid; socklen_t clilen; struct sockaddr_in cliaddr, servaddr; listenfd = Socket(AF_INET, SOCK_STREAM, 0); //1 bzero(&servaddr, sizeof(servad

socket套接字编程

socket套接字编程 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发         详见网络通信原理   socket是什么 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Soc

探索UDP套接字编程

UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务,而TCP提供面向流.提供可靠数据服务.注意,UDP和TCP没有好坏之分,只是二者的适用场景不同罢了. 典型的UDP套接字编程模型是客户端不予服务端建立连接,而只是调用sendto函数来向服务端发送数据,其中必须要指定服务端的信息,包括IP和端口等:服务端不接收来自客户端的连接,而只是调用recvfr

linux 套接字编程入门--Hello World

下述代码是linux套接字编程的入门代码.分为服务端和客户端源码. 服务端代码的主要流程是绑定ip地址和端口号建立套接字,等待客户端发起访问.接受客户端请求之后,向客户端发送字符串"hello world",关闭套接字,结束程序. 客户端代码的主要流程是向服务端对应的套接字发起请求,读取服务端发送的数据,并且打印出来. 代码已经详细注释,更多细节不再赘述. server.cpp #include<stdio.h> #include<stdlib.h> #incl

Linux Socket 原始套接字编程

对于linux网络编程来说,可以简单的分为标准套接字编程和原始套接字编程,标准套接字主要就是应用层数据的传输,原始套接字则是可以获得不止是应用层的其他层不同协议的数据.与标准套接字相区别的主要是要开发之自己构建协议头.对于原始套接字编程有些细节性的东西还是需要注意的. 1. 原始套接字创建 原始套接字的编程和udp网络编程的流程有点类似,但是原始套接字编程中不需要bind操作,因为在数据接收和发送过程中使用sendto和recvfrom函数实现数据的接收和发送.不过不是说原始套接字不能使用bin

【转】 探索UDP套接字编程

UDP和TCP处于同一层网络模型中,也就是运输层,基于二者之上的应用有很多,常见的基于TCP的有HTTP.Telnet等,基于UDP有DNS.NFS.SNMP等.UDP是无连接,不可靠的数据协议服务,而TCP提供面向流.提供可靠数据服务.注意,UDP和TCP没有好坏之分,只是二者的适用场景不同罢了. 典型的UDP套接字编程模型是客户端不予服务端建立连接,而只是调用sendto函数来向服务端发送数据,其中必须要指定服务端的信息,包括IP和端口等:服务端不接收来自客户端的连接,而只是调用recvfr