先看java代码
java服务器端:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class 服务器 {
public static void main(String[] args) {
try {
//在本机创建一个服务器 端口号为61666
ServerSocket soo=new ServerSocket(61666);
System.out.println("java创建服务器成功...");
Socket so=soo.accept();//等待连接 连接成功才能往下执行
InputStream in=so.getInputStream();//获取socket的输入流
byte[]by=new byte[1024];
while(true) {
int len=in.read(by);
System.out.println("java服务器收到消息 长度+" + len);
System.out.println(new String(by,0,len));
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
java客户端:
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class 客户端 {
public static void main(String[] args) {
try {
//第一个参数的服务器的ip 第二个参数是端口号
Socket so=new Socket("127.0.0.1",61666);
System.out.println("java连接服务器成功...");
OutputStream out=so.getOutputStream();//获取socket的输出流
Scanner in=new Scanner(System.in);
while(true) {
String s=in.nextLine();
out.write(s.getBytes());
out.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
再看C#的代码
C#这里写了两个方法 这里只讲第二个方法
C#服务器端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace 服务器
{
class Program
{
static void 方法1() {
Console.WriteLine("方法1");
//第一个参数是指定socket对象使用的寻址方案,即IPV4或IPV6;
//第二个参数socket对象的套接字的类型,此处stream是表示流式套接字
//第三个参数socket对象支持的协议,TCP协议或UDP协议
Socket soo = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);//参数这样写就好了
IPAddress ip = IPAddress.Parse("127.0.0.1");//本机ip作为服务器
IPEndPoint ipend = new IPEndPoint(ip, 61666);//将网络终结点表示为 IP 地址和端口号
soo.Bind(ipend);//用socket对像的Bind()方法绑定IPEndPoint 绑定主机端口号
//上面这一段相当于java的ServerSocket soo=new ServerSocket(61666);
//soo.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 61666));
soo.Listen(10);//挂起的连接队列的最大长度。貌似可以不写。不是最大连接数
Console.WriteLine("C#创建服务器成功...");
Socket so = soo.Accept();//等待用户连接 和java一样
byte[] by = new byte[1024];
while (true)
{
int len = so.Receive(by);//Send发送 Receive接收
Console.WriteLine("C#服务器收到消息 长度+" + len);
Console.WriteLine(Encoding.Default.GetString(by, 0, len));
}
}
static void 方法2()
{
Console.WriteLine("方法2");
TcpListener listener = new TcpListener(61666);//已过时
//TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 61666);
listener.Start();//启动服务器
//上面这一段相当于java的ServerSocket soo=new ServerSocket(61666);
Console.WriteLine("C#创建服务器成功...");
Socket so = listener.AcceptSocket();//等待用户连接 和java一毛一样
NetworkStream io = new NetworkStream(so);
byte[] by = new byte[1024];
while (true)
{
//接收一组byte 存储到字节数组by里
//从by[0]处开始存储该数据 要读取1024个字节
//len为实际读取到的字节数
int len = io.Read(by,0,10);
Console.WriteLine("C#服务器收到消息 长度+" + len);
Console.WriteLine(Encoding.Default.GetString(by, 0, len));
}
}
static void Main(string[] args)
{
方法2();
}
}
}
C#客户端:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace 客户端
{
class Program
{
static void 方法1() {
Console.WriteLine("方法1");
Socket so = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
so.Connect("127.0.0.1", 61666);
//相当于java的 Socket so=new Socket("127.0.0.1",61666);
//so.Connect(IPAddress.Parse("127.0.0.1"), 61666);//也行
Console.WriteLine("C#连接服务器成功...");
while (true)
{
string s = Console.ReadLine();
byte[] by = Encoding.Default.GetBytes(s);
so.Send(by);//Send发送 Receive接收
}
}
static void 方法2() {
Console.WriteLine("方法2");
TcpClient client = new TcpClient("127.0.0.1", 61666);//相当于java的 Socket so=new Socket("127.0.0.1",61666);
NetworkStream io = client.GetStream();
Console.WriteLine("C#连接服务器成功...");
while (true)
{
string s = Console.ReadLine();
byte[] by = Encoding.Default.GetBytes(s);//把字符串s转换成字节数组
io.Write(by, 0, by.Length);
io.Flush();
}
}
static void Main(string[] args)
{
方法2();
}
}
}
他们之间也能通信
直接运行就行了 代码不变
C#服务器 java客户端
java服务器 C#客户端