【C#,java】C#服务器java客户端socket通讯,同理其他语言也可以实现。

其实现在的不管游戏还是啥的,都大部分是服务端和客户端是不一样的语言,比如服务器端用的是c++,客户端用的安卓java,道理都是一样的,今天给大家带来一个客户端用java,服务器端用C#(C++++)的例子。

这个思想可以延申做一些比如服务器客户端的例子,也可以做聊天软件,命令响应的远程控制软件,还有一些数据发送的软件,总归使用通讯是基本网络软件所必须的。

需要注意的是:java那接收写的是readLine,得读到\r\n,所以给服务器端发送消息后面添加了\r\n.

环境:C# vs2015 , java eclipse 电脑环境:windows 10

资料借鉴于网络

下面附图和代码:

图:java客户端给服务器发消息。
【C#,java】C#服务器java客户端socket通讯,同理其他语言也可以实现。_第1张图片
服务器给java发,Java接收消息。
【C#,java】C#服务器java客户端socket通讯,同理其他语言也可以实现。_第2张图片
服务器代码(C#):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;

using System.Threading;

namespace ServerSocket
{
    public partial class Form1 : Form
    {
        //定义Socket对象
        Socket serverSocket;
        //定义监听线程
        Thread listenThread;
        //定义接收客户端数据线程
        Thread threadReceive;
        //定义双方通信
        Socket socket;
        string str;

        public Form1()
        {
            InitializeComponent();
        }

        private void button_start_Click_1(object sender, EventArgs e)
        {
            IPAddress ip = IPAddress.Parse(this.text_ip.Text.Trim());
            serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            try
            {
                //绑定ip和端口
                serverSocket.Bind(new IPEndPoint(ip, Convert.ToInt32(this.textport.Text.Trim())));
                //设置最多10个排队连接请求
                serverSocket.Listen(10);
                //开启线程循环监听
                listenThread = new Thread(ListenClientConnect);
                listenThread.Start();
                this.button_start.Enabled = false;

            }
            catch
            {
                MessageBox.Show("监听异常", "监听异常");
            }

        }

        //监听
        private void ListenClientConnect()
        {
            while (true)
            {
                //监听到客户端的连接,获取双方通信socket
                socket = serverSocket.Accept();
                //创建线程循环接收客户端发送的数据
                threadReceive = new Thread(Receive);
                //传入双方通信socket
                threadReceive.Start(socket);
            }
        }

        //接收客户端数据
        private void Receive(object socket)
        {
            try
            {
                Socket myClientSocket = (Socket)socket;
                while (true)
                {
                    byte[] buff = new byte[20000];
                    int r = myClientSocket.Receive(buff);
                    str = Encoding.Default.GetString(buff, 0, r);
                    this.Invoke(new Action(() => { this.text_log1.Text = str; }));
                }
            }
            catch
            {
                MessageBox.Show("接收数据失败", "接收数据失败");
            }
        }

        //关闭
      

       

        private void button_close_Click(object sender, EventArgs e)
        {
            
            //socket关闭
            serverSocket.Close();
            //线程关闭
            try
            {
                listenThread.Abort();
                threadReceive.Abort();
            }
            catch
            {
                this.button_start.Enabled = true;
                MessageBox.Show("未知错误", "未知错误");

            }
        }

        //发送
        private void button_send_Click(object sender, EventArgs e)
        {
            try
            {
                //MessageBox.Show("发送成功", "提示");
                string strMsg = text_log2.Text.Trim()+"\r\n";
                byte[] buffer = new byte[20000];
                buffer = Encoding.Default.GetBytes(strMsg);
                socket.Send(buffer);
            }
            catch
            {
                MessageBox.Show("发送数据失败", "发送数据失败");
            }
        }
    }

}

java客户端代码:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
 
public class socket{
    public static void main(String[] args) {
        try {
            /** 创建Socket*/
            // 创建一个流套接字并将其连接到指定 IP 地址的指定端口号(本处是本机)
            Socket socket =new Socket("127.0.0.1",6333);
            // 60s超时
            socket.setSoTimeout(60000);
            /** 发送客户端准备传输的信息 */
            // 由Socket对象得到输出流,并构造PrintWriter对象
            PrintWriter printWriter =new PrintWriter(socket.getOutputStream(),true);
            // 将输入读入的字符串输出到Server
            BufferedReader sysBuff =new BufferedReader(new InputStreamReader(System.in));
            printWriter.println(sysBuff.readLine());
            // 刷新输出流,使Server马上收到该字符串
            printWriter.flush();
            /** 用于获取服务端传输来的信息 */
            // 由Socket对象得到输入流,并构造相应的BufferedReader对象
            BufferedReader bufferedReader =new BufferedReader(new InputStreamReader(socket.getInputStream()));
            // 输入读入一字符串
            String result = bufferedReader.readLine();
            System.out.println("Server: " + result);
 
            /** 关闭Socket*/
            printWriter.close();
            bufferedReader.close();
            socket.close();
        }catch (Exception e) {
            System.out.println("Exception:" + e);
        }
    }
}

你可能感兴趣的:(C#,java,C#,java,socket,服务器客户端)