c 和 java 通过 socket 进行通信

socket 端口占用 命令:

1. netstat -anpt

现在使用C 的server 端 和java 的client 端进行简单的通信。

server.c

/*

============================================================================

Name : server.c

Author : king

Version :

Copyright : Your copyright notice

Description : Hello World in C, Ansi-style

============================================================================

*/

#include <stdlib.h>

#include <pthread.h>

#include <sys/socket.h>

#include <sys/types.h>

#include <netinet/in.h>

#include <arpa/inet.h> /* inet(3) functions */

#include <stdlib.h>

#include <errno.h>

#include <stdio.h>

#include <string.h>

int handle(int point);

int main(void) {

int sfd, ind;

struct sockaddr_in addr;

struct sockaddr_in clent;

char resv[1024], sendbuf[1024];

char buf[1024];

char * myaddr = "127.0.0.1";

int ret; // 返回值设置

socklen_t lent;

int pid;

addr.sin_family = AF_INET; //IPv4 Internet protocols

addr.sin_port = htons(5050); //这里输入服务器端口号

addr.sin_addr.s_addr = inet_addr(myaddr);

; //INADDR_ANY表示本机IP

//獲取socket描述符,IPV4asd

printf("socket start \n");

sfd = socket(AF_INET, SOCK_STREAM, 0);

if (sfd < 0) {

printf("socket error \n");

return -1;

}

printf("bind start \n");

//将套接子与指定端口链接

if (bind(sfd, (struct sockaddr *) &addr, sizeof(struct sockaddr)) < 0) {

printf("bind error \n");

return -1;

}

//监听套接子

printf("listen start \n");

if (listen(sfd, 1024) < 0) {

printf("listen error \n");

return -1;

}

for (;;) {

//接受来自客户端的信息

printf("accept start \n");

memset(&clent, 0, sizeof(clent));

lent = sizeof(clent);

ind = accept(sfd, (struct sockaddr *) &clent, &lent);

if (ind < 0) {

printf("accept error %d \n", ind);

return -1;

}

printf("infor \n");

printf("clent addr%s porit %d\n",

inet_ntop(AF_INET, &clent.sin_addr, buf, sizeof(buf)),

ntohs(clent.sin_port));

pid = fork();

if (pid == 0) {

//子进程

close(sfd);

handle(ind);

} else if (pid < 0) {

//error

close(ind);

} else {

//父进程

}

}

return EXIT_SUCCESS;

}

int handle(int point) {

int retn;

char buf[1024];

for (;;) {

retn = read(point, buf, sizeof(buf));

if (retn < 0) {

printf("read error \n");

close(point);

break;

} else if (retn == 0) {

printf("client exit \n");

close(point);

break;

}

printf("client:%s\n", buf);

if (strcmp("exit", buf) == 0) {

printf("exit \n");

close(point);

return 0;

}

}

return 0;

}

client.c

package HA.Socket;

import java.io.*;

import java.net.*;

public class SocketClient {

static Socket client;

public SocketClient(String site, int port){

try{

client = new Socket(site,port);

System.out.println("Client is created! site:"+site+" port:"+port);

}catch (UnknownHostException e){

e.printStackTrace();

}catch (IOException e){

e.printStackTrace();

}

}

public String sendMsg(String msg){

try{

BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

PrintWriter out = new PrintWriter(client.getOutputStream());

out.println(msg);

out.flush();

return in.readLine();

}catch(IOException e){

e.printStackTrace();

}

return "";

}

public void closeSocket(){

try{

client.close();

}catch(IOException e){

e.printStackTrace();

}

}

}

package HA.Socket;

public class TestSocketClient {

public static void main(String[] args){

SocketClient client = new SocketClient("127.0.0.1",5050);

System.out.println(client.sendMsg("test1111111111"));

client.closeSocket();

}

}

补充说明: 服务器端和客户端 都要使用相同的端口号。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-05 10:14:46

c 和 java 通过 socket 进行通信的相关文章

java NIO socket 通信实例

java Nio 通信与Bio通信主要不同点: 1.Nio中的单个channel即可支持读操作也可以支持写操作,而bio中读操作要用inputstream,写操作要outputstream. 2.nio 采用byteBuffer 作为内存缓存区,向channel里写或者度操作,bio基本是用byte[] 3.nio采用 selector组件轮询读取就绪channel 服务端demo代码: package com.my.socket3; import java.io.ByteArrayOutput

C++服务器与java进行socket通信案例

分类: [java]2012-10-08 12:03 14539人阅读 评论(46) 收藏 举报 注:本代码版权所有!!!转载时请声明源地址:http://blog.csdn.net/nuptboyzhb/article/details/8047619 你可以学习,分享,修改,教学等.但是不得用于商业目的.目前已经发现互联网上大量与本文完全相同的文章,但是却把作者信息删除的干干净净,并且据为己有,打上某培训机构的广告!实属可恶! 最新消息:项目成品连接:http://blog.csdn.net/

Java中Socket通信的知识回顾---学习笔记

两台计算机进行通信的基本前提: (1)IP地址: 每台计算机都有自己独一无二的IP地址,根据IP地址判断与哪台计算机进行通信. (2)端口号: 每个应用程序都有自己专属的端口,根据端口号判断与计算机中的哪个应用程序进行通信. 说明: <1>用于区分不同应用程序 <2>端口号的范围:0-65535,其中0-1023是为系统保留的端口号 <3>常用的协议的端口号: http:80 ftp:21 telnet:23 <4>IP地址+端口号=Socket,Socke

Java:Socket通信

Socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求.ServerSocket用于服务器端,Socket是建立网络连接时使用的.在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话.对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别.套接字之间的连接过程可以分为三个步骤:服务器监听,客户端请求,连接确认. 实例一:

java socket报文通信(一)socket的建立

java socket报文通信(一) socket的建立  今天来和大家分享一下java中如何使用socket进行通信.先来啰嗦两句,看看Tcp/ip和udp: TCP是Transfer Control Protocol的 简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socke

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port); 这个使用指定的端口去创建ServerSocket,IP地址使用默认的本地IP地址. (2) ServetSocket(int port,int backlog); 除了端口外,还有一个用来改变队列长度参数的backlog,指

java socket线程通信

关于socket线程通信的一些知识整理 一般我们需要要让两台机子进行通信,需要创建一个Server 类,一个Client类,还需要创建一个线程类 server public class Server { public static void main(String[] args) throws IOException {  ServerSocket ss = new ServerSocket(8888);  int num=0;  System.out.println("服务器即将启动,   等

linux c、java socket json 通信

一.服务端 c++ [email protected]:~/Public/xtranfer$ cat ./main.c #include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <unistd.h> #include <stdlib.h> #include <time.h> #incl

【Java基础学习笔记】Java中Socket+Swing设计简单通信

在<Java从入门到精通(第3版)>的原书中,客户端仅能发送一次数据,我在此基础上修改了一点点,实现了多次发送数据的单向通讯. 1. 服务器端 package Tcp_IP; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.sq