javaSocket编程TCP

来源:互联网 发布:jsp教务管理系统源码 编辑:程序博客网 时间:2024/05/16 17:05

主题为:javaSocket编程TCP

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

 

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

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

    Java代码 复制代码 收藏代码
    1. import java.io.IOException;
    2. import java.net.InetAddress;
    3. import java.net.Socket;
    4. public class ServerSocket {
    5. public staticvoid main(String[] args) {
    6. beginSocket();
    7. }
    8. public staticvoid 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. }

    为了提高并发时的处理效率,对于每个请求,系统都新建一个线程处理。

    Java代码 复制代码 收藏代码
    1. import java.io.BufferedReader;
    2. import java.io.InputStreamReader;
    3. import java.io.PrintWriter;
    4. import java.net.Socket;
    5. public class HelloMessageextends 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. }

    然后是客户端的代码。

    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 staticvoid main(String[] args) {
    9. clientRequest();
    10. }
    11. private staticvoid 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. }

    这样一个简单的TCP,Socket编程的原型就成了。简单介绍下:

    几个比较重要的API

    .Accept方法用于产生"阻塞",直到接受到一个连接,并且返回一个客户端的Socket对象实例。

    .getInputStream方法获得网络连接输入,同时返回一个IutputStream对象实例,。

    .getOutputStream方法连接的另一端将得到输入,同时返回一个OutputStream对象实例。

  • 原创粉丝点击