java下的socket通信与C/C++下的socket通信

来源:互联网 发布:澳门域名注册 编辑:程序博客网 时间:2024/05/14 09:14

JAVA下的socket通信:

关键点:

由Socket对象得到输入流(即由另一方发过来的数据),此时构造BufferedReader对象

由Socket对象得到输出流(即发往另一方的数据),此时构造PrintWriter对象

客户端:

public class Client {      public static void main(String[] args) throws Exception {          //向本机的5469端口发出客户请求          Socket socket=new Socket(InetAddress.getLocalHost(),5469);          //由Socket对象得到输入流,并构造相应的BufferedReader对象          BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));          //由Socket对象得到输出流,并构造PrintWriter对象          PrintWriter os=new PrintWriter(socket.getOutputStream());          //由系统标准输入设备构造BufferedReader对象          BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));          while(true){              String str=sin.readLine();//从系统标准输入读入一字符串              os.println(str);              os.flush(); //刷新输出流,使Server马上收到该字符串                            String s=is.readLine();              System.out.println("Server : "+s);//在标准输出上打印从Server读入的字符串              if(str.equals("end")){                  break;              }          }          is.close();//关闭Socket输入流          os.close();//关闭Socket输出流          socket.close();//关闭Socket      }  }  
服务器端:

public class MyServer {      public static void main(String[] args) throws Exception{          ServerSocket server=new ServerSocket(5469);//创建一个ServerSocket在端口5469监听客户请求          Socket client=server.accept();//使用accept()阻塞等待客户请求          BufferedReader is=new BufferedReader(new InputStreamReader(client.getInputStream()));          PrintWriter os=new PrintWriter(client.getOutputStream());          BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));          while(true){              String str=is.readLine();              System.out.println("Client : "+str);//在标准输出上打印从Client读入的字符串                            os.println(sin.readLine());              os.flush();//刷新输出流,使Client马上收到该字符串              if(str.equals("end")){                  break;              }          }          is.close();          os.close();          client.close();          server.close();      }  }  

C/C++下的Socket通信

客户端:
#include <winsock2.h>#include <iostream>using namespace std;int main(){WSADATA wsaData;SOCKET client;SOCKADDR_IN addr;char buf[128];if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){cout<<"初始化 winsock dll 失败"<<endl;return -1;}client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);cout<<"服务器 IP:";cin>>buf;addr.sin_family = AF_INET;addr.sin_addr.s_addr = inet_addr(buf);addr.sin_port = htons(9876);if(connect(client, (SOCKADDR *)&addr, sizeof(addr))== SOCKET_ERROR){cout<<"连接错误";int i;cin>>i;WSACleanup();return -1;}while(1){cout<<"message:";cin>>buf;send(client, buf, strlen(buf)+1, 0);if(strcmp(buf, "quit") == 0) break;recv(client, buf, sizeof(buf),0);cout<<"s:"<<buf<<endl;}closesocket(client);WSACleanup();return 0;}
服务器端:
#include "stdio.h"#include "winsock2.h"#include <iostream>#include <fstream>using namespace std;#define mode 1#define test 0int main(){WSADATA wsaData;SOCKET server,accsock;SOCKADDR_IN addr,addr_out;if(WSAStartup(0x202,&wsaData)!=0){cout<<"初始化错误"<<endl;return -1;}server = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addr.sin_family = AF_INET;addr.sin_port = htons(9876);bind(server,(SOCKADDR *)&addr,sizeof(addr));char buf[255];listen(server,1);cout<<"server is listening..."<<endl;int len = sizeof(SOCKADDR);accsock = accept(server,(SOCKADDR *)&addr_out,&len);char *ip;int port;ip = inet_ntoa(addr_out.sin_addr);port = htons(addr_out.sin_port);cout<<"server accept client ip:"<<ip<<",port:"<<port<<endl;while(1){recv(accsock,buf,strlen(buf),0);if(buf == 'quit')break;}closesocket(accsock);closesocket(server);WSACleanup();return 0;}




0 0
原创粉丝点击