javaSocket编程TCP

主题为:javaSocket编程TCP

原地址:http://www.iteye.com/topic/630748

 

  • 关于JAVA线程的数据转发(游戏项目中间层)
  • java多线程控制台聊天室
  • java Socket通信的学习笔记三
    推荐群组: D语言
    更多相关推荐

    写了一个javaSocket通信的例子,比较容易懂,主要是TCP协议的。下面是服务端的代码

    Java代码 复制代码 收藏代码
    1. import java.io.IOException;
    2. import java.net.InetAddress;
    3. import java.net.Socket;
    4. public class ServerSocket {
    5. public static void main(String[] args) {
    6. beginSocket();
    7. }
    8. public static void beginSocket(){
    9. try {
    10. java.net.ServerSocket serverSocket=new java.net.ServerSocket(3456);
    11. InetAddress inta=serverSocket.getInetAddress().getLocalHost();
    12. System.out.println(inta.getHostAddress());
    13. while(true){
    14. Socket socket=serverSocket.accept();
    15. new HelloMessage(socket);
    16. }
    17. } catch (IOException e) {
    18. e.printStackTrace();
    19. }
    20. }
    21. }
    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.ServerSocket serverSocket=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代码 复制代码 收藏代码
    1. import java.io.BufferedReader;
    2. import java.io.InputStreamReader;
    3. import java.io.PrintWriter;
    4. import java.net.Socket;
    5. public class HelloMessage extends Thread {
    6. private Socket socket_ = null;
    7. public HelloMessage(Socket socket) {
    8. this.socket_ = socket;
    9. this.start();
    10. }
    11. public void run() {
    12. try {
    13. BufferedReader bReader = new BufferedReader(new InputStreamReader(
    14. this.socket_.getInputStream()));
    15. PrintWriter pWriter = new PrintWriter(this.socket_
    16. .getOutputStream());
    17. String requestStr = bReader.readLine();
    18. if (requestStr != null && !"".equals(requestStr)) {
    19. if (requestStr.equals("java")) {
    20. pWriter.println("your write is java");
    21. }
    22. if (requestStr.equals(".net")) {
    23. pWriter.println("your write is .net");
    24. }
    25. if (requestStr.equals("php")) {
    26. pWriter.println("your write is php");
    27. }
    28. if (requestStr.equals("end")) {
    29. pWriter.println("your write is end");
    30. }else{
    31. pWriter.println("your write is other");
    32. }
    33. }else{
    34. pWriter.println("your write is null");
    35. }
    36. pWriter.flush();
    37. pWriter.close();
    38. bReader.close();
    39. this.socket_.close();
    40. } catch (Exception e) {
    41. e.printStackTrace();
    42. }
    43. }
    44. }
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.Socket;
    
    public class HelloMessage extends Thread {
    	private Socket socket_ = null;
    	public HelloMessage(Socket socket) {
    		this.socket_ = socket;
    		this.start();
    	}
    
    	public void run() {
    		try {
    			BufferedReader bReader = new BufferedReader(new InputStreamReader(
    					this.socket_.getInputStream()));
    			PrintWriter pWriter = new PrintWriter(this.socket_
    					.getOutputStream());
    			String requestStr = bReader.readLine();
    			if (requestStr != null && !"".equals(requestStr)) {
    				if (requestStr.equals("java")) {
    					pWriter.println("your write is java");
    				}
    				if (requestStr.equals(".net")) {
    					pWriter.println("your write is .net");
    				}
    				if (requestStr.equals("php")) {
    					pWriter.println("your write is php");
    				}
    				if (requestStr.equals("end")) {
    					pWriter.println("your write is end");
    		
    				}else{
    					pWriter.println("your write is other");
    				}
    			}else{
    				pWriter.println("your write is null");
    			}
    			pWriter.flush();
    			pWriter.close();
    			bReader.close();
    			this.socket_.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    
    	}
    }
    

    然后是客户端的代码。

    Java代码 复制代码 收藏代码
    1. import java.io.BufferedReader;
    2. import java.io.IOException;
    3. import java.io.InputStreamReader;
    4. import java.io.PrintWriter;
    5. import java.net.Socket;
    6. import java.net.UnknownHostException;
    7. public class ClientSocket {
    8. public static void main(String[] args) {
    9. clientRequest();
    10. }
    11. private static void clientRequest() {
    12. try {
    13. while (true) {
    14. Socket clientSocket = new Socket("172.168.4.105", 3456);
    15. BufferedReader bReader = new BufferedReader(new InputStreamReader(
    16. System.in));
    17. System.out.println("please input java or .net or php or end");
    18. String strLine = bReader.readLine();
    19. if (strLine != null && !"".equals(strLine)) {
    20. PrintWriter pWriter = new PrintWriter(clientSocket
    21. .getOutputStream(), true);
    22. pWriter.println(strLine);
    23. BufferedReader br = new BufferedReader(
    24. new InputStreamReader(clientSocket.getInputStream()));
    25. String strResult = br.readLine();
    26. System.out.println(strResult);
    27. pWriter.flush();
    28. pWriter.close();
    29. clientSocket.close();
    30. }
    31. }
    32. } catch (UnknownHostException e) {
    33. e.printStackTrace();
    34. } catch (IOException e) {
    35. e.printStackTrace();
    36. }
    37. }
    38. }
    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 = new Socket("172.168.4.105", 3456);
    				BufferedReader bReader = new BufferedReader(new InputStreamReader(
    						System.in));
    				System.out.println("please input java or .net or php or end");
    				String strLine = bReader.readLine();
    				if (strLine != null && !"".equals(strLine)) {
    					PrintWriter pWriter = new PrintWriter(clientSocket
    							.getOutputStream(), true);
    					pWriter.println(strLine);
    					BufferedReader br = new BufferedReader(
    							new InputStreamReader(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对象实例。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值